Я не могу заставить отладчик транспортира работать с узлами 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, но в результате ожидание длиннее, но ошибка та же.
Кто знает решение этой проблемы?