web-dev-qa-db-fra.com

Erreur de débogage du rapporteur avec le noeud 8 asynchrone/wait et angulaire 6

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?

3
Herman Fransen

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
2
Yaroslav Admin