Les tests de rapporteur ne passent pas ou échouent de manière incohérente pour l'application AngularJS
Mon Rapporteur e2e tests sont de façon incohérente la réussite et l'échec.
Il semble que cela pourrait être dû à asynchronous javascript, comme expliqué ici:
Rapporteur : Comment attendre la page complète après cliquez sur un bouton?.
Cependant, ici, il est mentionné que le Rapporteur tests d'exécuter automatiquement de manière séquentielle /synchrone:
https://github.com/angular/protractor/issues/909
Mon script de test:
describe('Login', function() {
var ptor;
beforeEach(function() {
browser.get('https://127.0.0.1:8443');
ptor = protractor.getInstance();
element(by.id('splash')).click();
browser.ignoreSynchronization = true; //<-- to proceed beyond splash screen
});
describe('with correct email and password', function() {
beforeEach(function() {
element(by.id('email')).sendKeys('[email protected]');
element(by.id('password')).sendKeys('adminpassword');
element(by.id('loginButton')).click();
});
afterEach(function() {
ptor.findElement(by.id('logout')).then(function(elem) {
elem.click();
});
});
it('does not show alert', function() { //<-- sometimes passes, sometimes fails
expect(browser.isElementPresent(by.css('.alert-danger'))).toBe(false);
});
it('changes route to /admin', function() { //<-- sometimes passes, sometimes fails
expect(browser.getCurrentUrl()).toMatch(/\/admin/);
});
});
});
Dans les deux tests ci-dessus, soit les deux tests vont passerou un/deux tests échouent avec ces messages:
Failures:
1) Login with correct email and password does not show alert
Message:
NoSuchElementError: no such element
...
==== async task ====
WebDriver.findElement(By.id("logout"))
...
ou
Failures:
1) Login with correct email and password changes route to /admin
Message:
NoSuchElementError: no such element
...
==== async task ====
WebDriver.findElement(By.id("logout"))
...
Pensées /aide beaucoup apprécié.
source d'informationauteur ozandlb | 2014-07-25
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure de résoudre le problème de base sur les éléments suivants:
Avishay's réponse ici sur l'ajout de mandat proposé concernant l'éie.waitForAngular():
Aucun élément à l'aide du localisateur: par.modèle() erreur
Évolution de navigateur.obtenez de mandat proposé concernant l'éie.obtenir, comme dans Harri Siirak's réponse ici:
Le rapporteur temps d'attente pour les synchroniser avec la page lors de l'utilisation de $ressource
juliemr'commentaire ici sur ignoreSynchronization être une variable d'instance, et de changer de navigateur.ignoreSynchronization=true mandat proposé concernant l'éie.ignoreSynchronization=true:
https://github.com/angular/protractor/issues/49
glepretre's réponse ici sur l'utilisation .alors():
Rapporteur : Comment attendre la page complète après cliquez sur un bouton?
Comme mentionné par Nguyen Vu Hoang'commentaire à la question d'origine, je suis en train de tester un pur Angulaire app avec ce que je pense est de la pure Rapporteur (pas de webdriver appels). Je sais mandat proposé concernant l'éie.ignoreSynchronization=true ne devrait pas être nécessaire dans ce cas, mais pour une raison quelconque, les tests ne sont pas procéder au clic de bouton sans ce paramètre.
Mon nouveau spec:
Il y a aussi une autre technique pour faire vos tests plus stable: Explicite Attend Attendus et les Conditions de (docs).
J'ai trouvé de l'aide Attendue des Conditions particulièrement utile lors de l'essai à l'égard des non-angulaire pages ou angulaire des applications qui ont beaucoup d'animations en cause.
Par exemple, vous pouvez attendre pour qu'un élément soit cliquable avant de faire un clic:
Il y a aussi d'autres intégrés dans des Conditions Attendues, telles que:
presenseOf()
visibilityOf()
alertIsPresent()
textToBePresentInElementValue()
Et, il est facile d'écrire une coutume Condition Attendue, exemple de cas d'utilisation:
Vous pouvez également combiner les Conditions prévues à l'aide de
and
or
etnot
par exemple:navigateur.ignoreSynchronization = true; a un effet global pour tous vos tests. vous pouvez le mettre dos à faux, alors rapporteur attend angulaire d'être terminé, le rendu de la page. par exemple, dans ou devant votre deuxième beforeEach fonction