Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

294
Visualizações
¿Qué es browser.ignoreSynchronization en transportador?

Lo he visto tantas veces donde la gente sugiere usar:

 browser.ignoreSynchronization=true; // or false

Pero no entiendo por qué lo necesitamos?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La respuesta simple es que hace que el transportador no espere a que se resuelvan las promesas de Angular, como las de $http o $timeout , lo que quizás desee hacer si está probando el comportamiento durante $http o $timeout (por ejemplo, un "loading "mensaje), o probar sitios o páginas no angulares, como una página de inicio de sesión separada.

Por ejemplo, para probar un botón que establece un mensaje de carga durante una solicitud, puede establecerlo en true al buscar un elemento + verificar su contenido

 element(by.css('button[type="submit"]')).click(); browser.ignoreSynchronization = true; expect(element(by.css('.message')).getText().toBe('Loading...'); browser.ignoreSynchronization = false; expect(element(by.css('.message')).getText().toBe('Loaded');

Una respuesta más complicada es que establecerlo en true significa que las adiciones/inyecciones posteriores al flujo de control no agregan también browser.waitForAngular . Hay casos en los que es importante comprender el flujo de control y cuándo/cómo se agregan/inyectan cosas en él. Por ejemplo, si usa browser.wait para probar un proceso de varias etapas, la función que se pasa a wait se inyecta en el flujo de control después de que el resto de las funciones de la prueba se hayan agregado al flujo de control.

 element(by.css('button[type="submit"]')).click(); browser.ignoreSynchronization = true; expect(element(by.css('.message')).getText().toBe('Stage 1'); browser.wait(function () { // This function is added to the control flow after the final // browser.ignoreSynchronization = false in the test // so we need to set it again here browser.ignoreSynchronization = true; return element(by.cssContainingText('.message', 'Stage 2')).isPresent().then(function(isPresent) { // Cleanup so later tests have the default value of false browser.ignoreSynchronization = false; return !isPresent; }); }); expect(element(by.css('.message')).getText().toBe('Stage 2'); browser.ignoreSynchronization = false; expect(element(by.css('.message')).getText().toBe('Stage 3');

Una alternativa al uso de browser.ignoreSynchronization es acceder directamente a la API webdriver estándar

 element(by.css('button[type="submit"]')).click(); expect(browser.driver.findElement(by.css('.message')).getText().toBe('Loading...'); expect(element(by.css('.message')).getText().toBe('Loaded');

El uso directo de los métodos del controlador para encontrar los elementos significa que el sistema intentará encontrarlos sin esperar a que finalice ninguna solicitud $http en curso, como si se configurara browser.ignoreSynchronization = true .

over 4 years ago · Santiago Trujillo Relatório

0

Esta configuración controla si el transportador debe esperar a angular en una página o no. No está debidamente documentado, pero aquí está la cadena de documentación del código :

 /** * If true, Protractor will not attempt to synchronize with the page before * performing actions. This can be harmful because Protractor will not wait * until $timeouts and $http calls have been processed, which can cause * tests to become flaky. This should be used only when necessary, such as * when a page continuously polls an API using $timeout. * * @type {boolean} */

En otras palabras, si está probando en un sitio no angular, establezca la configuración ignoreSynchronization en true . Como ejemplo del mundo real, vea uno de los desafíos que tuve al abrir una página no angular desde una página angular: página no angular abierta después de un clic .

over 4 years ago · Santiago Trujillo Relatório

0

2021 respuesta

browser.ignoreSynchronization no es nada en estos días. Literalmente

Este comando quedó obsoleto el 25 de enero de 2018 cuando se lanzó el transportador v5.3.0

En su lugar, se debe usar browser.waitForAngularEnabled()

Pero lo que hace y lo que solía hacer ignoreSynchronization , habilita el manejo integrado de Protractor para la espera de aplicaciones angulares. Imagínese, hace clic en el botón de inicio de sesión y no necesita usar el comando 'dormir durante 10 segundos', o 'esperar hasta que la animación de carga haya terminado', etc. En teoría, todo eso debería manejarse con un transportador listo para usar.

Pero en realidad, hay demasiados casos extremos en los que no puede confiar en esto y tiene que deshabilitar esta característica, porque hace que el script se cuelgue. Y aquí es cuando entra en juego await browser.waitForAngularEnabled(false) . O await browser.waitForAngularEnabled(true) para volver a habilitarlo

Lea cómo se puede utilizar

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda