En una especificación de prueba, necesito hacer clic en un botón en una página web y esperar a que la nueva página se cargue por completo.
emailEl.sendKeys('jack');
passwordEl.sendKeys('123pwd');
btnLoginEl.click();
// ...Here need to wait for page complete... How?
ptor.waitForAngular();
expect(ptor.getCurrentUrl()).toEqual(url + 'abc#/efg');
jasmine
protractor
wait
Zach
fuente
fuente

Respuestas:
Dependiendo de lo que quieras hacer, puedes probar:
browser.waitForAngular();o
btnLoginEl.click().then(function() { // do some stuff });para resolver la promesa. Sería mejor si pudiera hacerlo en el
beforeEach.NB: Me di cuenta de que el esperar () espera a que se resuelva la promesa dentro (es decir, getCurrentUrl) antes de comparar.
fuente
browser.driver.sleep(1000)como se sugiere a continuación hizo el truco.waitForAngular()no debe utilizarse . Acerca declick().then()que no funcionó para mí. Solo podía confiar enbrowser.wait(//use of protractor.ExpectedConditions).Acabo de echar un vistazo a la fuente: Protractor está esperando Angular solo en algunos casos (como cuando
element.allse invoca o configura / obtiene la ubicación).Entonces Protractor no esperará a que Angular se estabilice después de cada comando.
Además, parece que a veces en mis pruebas tuve una carrera entre el ciclo de resumen angular y el evento de clic, así que a veces tengo que hacer:
usando sleep para esperar la ejecución para ingresar al contexto AngularJS (desencadenado por un
clickevento)fuente
expect. En otros casos utilizo explícitamentewaitForAngular.element(by.css('my-css')).click(). Parece que el .click NO está esperando, aunque se devuelve una promesa.return elm.click().then(function () { return nextAction(); }No es necesario esperar. El transportador espera automáticamente a que angular esté listo y luego ejecuta el siguiente paso en el flujo de control.
fuente
waitForAngular()se llama internamente, pero también tuve que llamarlo para algunas especificaciones.browser.get, dice explícitamente que existe para sobrescribir lo que envuelve. Si no hay unclickmétodo paraElementFinder, entonces parece que solo delega enwebDriver.WebElement. angular.github.io/protractor/#/api?view=ElementFinderCon transportador, puede utilizar el siguiente enfoque
Entonces su código se verá algo así como,
Nota: Esto puede no significar que la nueva página haya terminado de cargarse y que DOM esté listo. La siguiente declaración 'espera ()' asegurará que Transportador espere a que DOM esté disponible para la prueba.
Referencia: condiciones esperadas del transportador
fuente
En este caso, puede utilizar:
Objeto de página:
Prueba de página:
fuente
Por lo general, solo agrego algo al flujo de control, es decir:
it('should navigate to the logfile page when attempting ' + 'to access the user login page, after logging in', function() { userLoginPage.login(true); userLoginPage.get(); logfilePage.expectLogfilePage(); });logfilePage:
function login() { element(by.buttonText('Login')).click(); // Adding this to the control flow will ensure the resulting page is loaded before moving on browser.getLocationAbsUrl(); }fuente
Usa esto, creo que es mejor
Para que pueda utilizar esta configuración de isAngularSite, debe poner esto en su protractor.conf.js aquí:
fuente
puedes hacer algo como esto
emailEl.sendKeys('jack'); passwordEl.sendKeys('123pwd'); btnLoginEl.click().then(function(){ browser.wait(5000); });fuente
para resolver la promesa.
fuente