Rapporteur : Comment attendre la page complète après cliquez sur un bouton?
Dans un test spec, j'ai besoin de cliquer sur un bouton sur une page web, et d'attendre pour la nouvelle page complètement chargée.
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');
- Pourriez-vous être plus précis sur la page que vous êtes en attente pour ? Êtes-vous juste en attente d'un changement de page ou pour un chargement asynchrone ?
Vous devez vous connecter pour publier un commentaire.
En fonction de ce que vous voulez faire, vous pouvez essayer:
browser.waitForAngular();
ou
pour résoudre la promesse. Il serait mieux si vous pouvez le faire dans le
beforeEach
.NB: j'ai remarqué que le fait de s'attendre() attend la promesse à l'intérieur (c'est à dire getCurrentUrl) pour être résolus avant de les comparer.
browser.driver.sleep(1000)
comme l'a suggéré ci-dessous a fait le tour.waitForAngular()
ne doit pas être utilisé. Sur leclick().then()
il ne fonctionne pas pour moi. Je ne pouvais que compter surbrowser.wait(//use of protractor.ExpectedConditions)
.J'ai juste eu un coup d'oeil à la source, le Rapporteur est en attente Angulaire que dans quelques cas (comme quand
element.all
est invoquée, ou obtenir de l'emplacement).Donc Rapporteur, de ne pas attendre Angulaire à se stabiliser après chaque commande.
Aussi, il ressemble parfois dans mes tests, j'ai eu une course entre Angulaire digérer cycle et cliquez sur l'événement, alors parfois j'ai à faire:
à l'aide de sommeil à attendre pour l'exécution d'entrer AngularJS contexte (déclenché par
click
événement).expect
. Dans d'autres cas, j'ai utiliser explicitementwaitForAngular
.element(by.css('my-css')).click()
. Il semble que l' .cliquez sur n'est PAS d'attente, bien qu'une promesse est retournée.return elm.click().then(function () { return nextAction(); }
Vous n'avez pas besoin d'attendre. Le rapporteur automatiquement attend angulaire pour être prêt et il exécute ensuite la prochaine étape dans le flux de contrôle.
waitForAngular()
est appelée en interne, mais j'ai dû l'appeler pour quelques specs trop.browser.get
, il dit explicitement qu'il existe de remplacer la chose qu'il encapsule. Si il n'y a pas declick
méthode pourElementFinder
, il semble comme il vient de délégués à lawebDriver.WebElement
. angulaire.github.io/rapporteur/#/api?view=ElementFinderAvec le Rapporteur, vous pouvez utiliser l'approche suivante
De sorte que votre code devrait ressembler à quelque chose comme,
Remarque: on ne pourra pas dire que la page a fini de charger et DOM est prêt. Le lancement de la " expect()' déclaration d'assurer le Rapporteur attend DOM pour être disponible pour le test.
Référence: Le Rapporteur ExpectedConditions
Dans ce cas, vous pouvez utilisé:
Objet De Page:
Page De Test:
En général, je viens d'ajouter quelque chose pour que le flux de contrôle, c'est à dire:
logfilePage:
Utiliser cela, je pense que c'est mieux
Pour vous d'utiliser ce paramètre de isAngularSite devrait mettre ceci dans votre protractor.conf.js ici:
vous pouvez faire quelque chose comme ceci
JS:
pour résoudre la promesse.