Ошибка отладки транспортира с узлом 8 async / await и angular 6 - PullRequest
0 голосов
/ 14 декабря 2018

Я не могу заставить отладчик транспортира работать с узлами 8 async / await и Angular 6. Возвращение к узлу 7 старым способом с elementExplorer, browser.pause() и browser.debugger() не вариант.Кроме того, потому что в будущем control flow удаляется из Selenium, и я продолжаю читать, что это лучший способ отладки с использованием узла 8 async / await вместо control flow.

Я использую угловой 6.0.3, угловой CLI 6.0.5, узел 8.11.2 и хром 71.0.3578.98.Я воспроизвожу проблему, сгенерировав тестовое приложение с CLI:

ng new stack-overflow-debugging-protractor --style=scss --routing

Генерация этого приложения с угловым CLI автоматически устанавливает и настраивает транспортир 5.3.2.

У меня есть простой тест, который запускается ng e2e с успехами:

describe('workspace-project App', () => {
  it('should display welcome message', () => {
    browser.get('/');
    expect(element(by.css('app-root h1')).getText()).toEqual('Welcome to app!');
  });
});

Я следую этому документу, чтобы настроить свою среду отладки

Чтобы она работала с асинхронным ожиданием / ожиданием, мне нужно отключить control flow поэтому в protractor.conf.js я добавляю SELENIUM_PROMISE_MANAGER: false и в ./e2e/tsconfig.e2e.json меняю "target": "es5" на "target": "es2017"

В тесте e2e я добавляю async и await и добавляю команду 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!');
  });
});

Когда я выполняю ng e2e, он по-прежнему работает с успехом:

Я запускаю отладчик в сеансе связи:

node --inspect-brk ./node_modules/protractor/bin/protractor ./e2e/protractor.conf.js

Я открываю Chrome Inspectorchrome://inspect/#devices в браузере, найдите текущую цель и нажмите inspect.Затем я нажимаю на кнопку resume script execution (или F8), и тест должен остановиться на первой строке с ключевым словом debugger.

Но это не так, и Chrome автоматически открывает новое окно с ошибкой ERR_CONNECTION_REFUSED.Консоль Chrome DevTools пуста.Сеанс терминала дает:

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

Поэтому я читаю предложения и добавляю getPageTimeout: 60000 к protractor.conf.js к.Тогда я получаю ошибку:

Failed: Error while running testForAngular: script timeout: result was not received in 11 seconds

Похоже на ту же ошибку, поэтому я изменяю protractor.conf.js line allScriptsTimeout: 11000 на 60000.Затем я получаю сообщение об ошибке:

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) 

Снова, поэтому я заменяю protractor.conf.js line defaultTimeoutInterval: 30000 как часть jasmineNodeOpts на 60000.Та же ошибка.

Я также пробовал более высокое значение, 200000, но в результате ожидание длиннее, но ошибка та же.

Кто знает решение этой проблемы?

1 Ответ

0 голосов
/ 16 декабря 2018

Запуск Protractor напрямую не запускает приложение для автоматического запуска тестов, это часть работы, которую выполняет команда ng e2e.

Чтобы устранить проблему, вы можете либо запустить приложение в отдельном окне терминалаиспользуя ng serve или, возможно, вы можете запустить отладчик для команды ng e2e (которая запустит приложение изнутри):

node --inspect-brk ./node_modules/.bin/ng e2e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...