Page de départ angulaire. En cliquant sur un bouton, vous accédez à la page de connexion qui est sans angle. Après la connexion, le reste des pages est angulaire.
J'utilise async / await .
waitForAngularEnable
( true ) dans onPrepare mais cela n'a pas fonctionné.waitForAngularEnable
( true ) après la connexion et cela n'a pas fonctionné.timeOut
et cela n'a pas fonctionné aussi.waitForAngularEnable
( false ). Je ne peux pas utiliser la fonction intégrée dans le rapporteur waiForAngular qui attend le chargement angulaire. Actuellement, avec waitForAngularEnable (false), je le gère manuellement en utilisant browser.driver.wait (until.elementsLocated (by.id (value)), 30000); ou attendez browser.wait (ExpectedConditions.presenceOf (ele), 30000) ;. De cette façon, cela fonctionne.Versions-
"rapporteur": "^ 5.4.2"
"nœud": 10.15.3
"target": "es6"
"concombre": "^ 5.1.0",
"concombre-html-reporter": "^ 5.0.0"
ScriptTimeoutError: délai d'expiration du script: le résultat n'a pas été reçu dans les 30 secondes
(Informations sur la session: chrome = 74.0.3729.169)
(Info pilote: chromedriver = 74.0.3729.6
(255758eccf3d244491b8a1317aa76e1ce10d57e9-refs / branch-heads / 3729 @ {# 29}), platform = Windows NT 10.0.17763 x86_64) sur Object.checkLegacyResponse
(C: \ Automation \ General \ node_modules \ selenium-webdriver \ lib \ error.js: 546: 15) dans parseHttpResponse (C: \ Automation \ General \ node_modules \ selenium-webdriver \ lib \ http.js: 509: 13)
à doSend.then.response (C: \ Automation \ General \ node_modules \ selenium-webdriver \ lib \ http.js: 441: 30)
à process._tickCallback (internal / process / next_tick.js: 68: 7) From: Task: Protractor.waitForAngular () - Locator: By (xpath, // span [@ class = 'title__subtext'])
3 Réponses :
Ce que vous faites (selon ma compréhension de votre problème)
await browser.waitForAngularEnabled(false);
(mais le rapporteur ne répond pas car vous êtes sur une page non angulaire)Ce que tu devrais faire
await browser.waitForAngularEnabled(false);
Simplement, vous devez désactiver l'attente angulaire PENDANT que vous êtes toujours sur la page angulaire
PS et vice versa. si vous passez d'une page non angulaire à une page angulaire, vous ne devez activer la fonctionnalité que lorsque vous avez atterri sur une page angulaire
Il est possible d'utiliser waitForAngularEnabled
plusieurs fois dans le même test, mais nécessite un ajout non évident de browser.get
. Vous pouvez utiliser les éléments suivants:
// do things on your Angular application waitForAngularEnabled(false) // do things on non-angular page waitForAngularEnabled(true) browser.get('/home') // this is a page from your Angular application
La fonction browser.get
bloque jusqu'à ce que la page angulaire soit chargée.
Pour les applications angulaires, Protractor attendra que la Angular Zone
stabilise. Cela signifie que les opérations asynchrones de longue durée empêcheront votre test de continuer. Pour contourner ce problème, exécutez les tâches suivantes en dehors de la zone angulaire.
Vous devez probablement définir ce délai comme correctif jusqu'à ce que le problème soit résolu au niveau de l'application
allScriptsTimeout: 60000
J'ai trouvé un bon article à ce sujet: https://valor-software.com/articles/testing-with-protractor-how-to-fix-synchronization-issues.html
Si cela fonctionne, quel est votre problème. Vous devrez définir waitForAngularEnable (false) pour les pages non angulaires.
Je ne peux pas utiliser la fonction intégrée dans le rapporteur waiForAngular qui attend le chargement angulaire. Actuellement, avec waitForAngularEnable (false), je le gère manuellement en utilisant browser.driver.wait (until.elementsLocated (by.id (value)), 30000); ou attendez browser.wait (ExpectedConditions.presenceOf (ele), 30000) ;. De cette façon, cela fonctionne.