Je ne parviens pas à faire fonctionner le débogueur de rapporteur avec le noeud 8 async/wait et Angular 6. Revenir au noeud 7 à l'ancienne avec elementExplorer
, browser.pause()
et browser.debugger()
n'est pas une option. Aussi, parce qu'à l'avenir, le control flow
est supprimé de Selenium et je continue à lire que c'est une meilleure expérience de débogage en utilisant le noeud 8 async/wait au lieu de control flow
.
J'utilise les versions angulaires 6.0.3, CLI 6.0.5, n ° 8.11.2 et chrome 71.0.3578.98. Je reproduis le problème en générant une application de test avec CLI:
ng new stack-overflow-debugging-protractor --style=scss --routing
Générer cette application avec CLI angulaire installe et configure automatiquement le rapporteur 5.3.2.
J'ai un test simple qui exécute ng e2e
avec succès:
describe('workspace-project App', () => {
it('should display welcome message', () => {
browser.get('/');
expect(element(by.css('app-root h1')).getText()).toEqual('Welcome to app!');
});
});
Je suis ce document pour configurer mon environnement de débogage
Pour que cela fonctionne avec async/wait, je dois désactiver control flow
donc dans protractor.conf.js
j'ajoute Selenium_PROMISE_MANAGER: false
et dans ./e2e/tsconfig.e2e.json
je change "target": "es5"
en "target": "es2017"
Dans le test e2e, j'ajoute async
et await
et ajoute la commande debugger
describe('workspace-project App', () => {
it('should display welcome message', async () => {
await browser.get('/');
debugger;
await expect(element(by.css('app-root h1')).getText()).toEqual('Welcome to app!');
});
});
Quand j'exécute ng e2e
, il fonctionne toujours avec succès:
Je lance le débogueur dans une session standard:
node --inspect-brk ./node_modules/protractor/bin/protractor ./e2e/protractor.conf.js
J'ouvre chrome Inspector chrome://inspect/#devices
dans le navigateur, trouve la cible en cours d'exécution et clique sur inspect
. Ensuite, je clique sur le bouton resume script execution
(ou F8) et le test doit s'interrompre à la première ligne avec le mot clé debugger
.
Mais ce n'est pas le cas et Chrome ouvre automatiquement une nouvelle fenêtre avec une erreur ERR_CONNECTION_REFUSED
. La console de Chrome DevTools est vide. La session de terminal donne:
E/protractor - Could not find Angular on page http://localhost:4200/ : retries looking for angular exceeded
Failed: Angular could not be found on the page http://localhost:4200/. If this is not an Angular application, you may need to turn off waiting for Angular.
Please see https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular-on-page-load
J'ai donc lu les suggestions et ajouté getPageTimeout: 60000
à protractor.conf.js
à. Alors j'obtiens une erreur:
Failed: Error while running testForAngular: script timeout: result was not received in 11 seconds
Cela ressemble à la même erreur, je change donc protractor.conf.js
ligne allScriptsTimeout: 11000
en 60000
. Alors j'obtiens une erreur:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at ontimeout (timers.js:498:11)
at tryOnTimeout (timers.js:323:5)
(node:11716) UnhandledPromiseRejectionWarning: Error: 'fail' was used when there was no current spec, this could be because an asynchronous test timed out
(node:11716) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which wasnot handled with .catch(). (rejection id: 1)
Encore une fois, je change donc protractor.conf.js
ligne defaultTimeoutInterval: 30000
dans le cadre de jasmineNodeOpts
en 60000
. Même erreur.
J'ai aussi essayé une valeur plus élevée, 200000, mais dans le résultat l'attente est plus longue mais l'erreur est la même.
Qui connaît une solution à ce problème?
L'exécution de Protractor directement ne lancera pas automatiquement une application pour exécuter des tests, cela fait partie de la commande work ng e2e
.
Pour résoudre le problème, vous pouvez soit lancer l'application dans la fenêtre de terminal séparée à l'aide de ng serve
, soit exécuter le débogueur avec la commande ng e2e
(ce qui lancera une application sous le capot):
node --inspect-brk ./node_modules/.bin/ng e2e