Когда я выполняю protractor protractor.conf.js --baseUrl=http://localhost:4200/
, он работает хорошо - заполняет данные, проверяет элементы и т. Д.
Когда я пытаюсь протестировать точно такой же веб-сайт через удаленный URL-адрес protractor protractor.conf.js --baseUrl=http://the-same-website.com/
, он открывается в браузере, логины и все необходимые части загружаются, как в localhost, но Protractor / Jasmine не заполняет / щелкает / не проверяет что-либо, и я получаю Тайм-аут после указанного времени:
- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at ontimeout (timers.js:436:11)
at tryOnTimeout (timers.js:300:5)
at listOnTimeout (timers.js:263:5)
at Timer.processTimers (timers.js:223:10)
- Failed: script timeout: result was not received in 30 seconds
(Session info: chrome=71.0.3578.98)
Существуют другие потоки, схожие проблемы с переполнением стека - пробовал browser.ignoreSynchronization = true
и Protractor.waitForAngular(false)
, но затем страница не загружается должным образом и тесты не пройдены, потому что элементы не найдены.
ОБНОВЛЕНИЕ 1
Приведенный ниже тест хорошо работает на локальном хосте - выводит успех или неудачу в зависимости от h1, но на удаленном URL ничего не проверяет, несмотря на загрузку сети:
import { browser, by, element } from 'protractor';
describe('example-test', () => {
const PATH_TO_TEST = 'specific-path/to/test';
beforeEach(() => {
browser.get(PATH_TO_TEST);
});
it('should exist header', () => {
expect(element(by.css('h1')).getText()).toEqual('test');
});
});
Если я добавлю ведение журнала, я вижу вывод, но expect
не выполняется:
import { browser, by, element } from 'protractor';
describe('example-test', () => {
const PATH_TO_TEST = 'specific-path/to/test';
beforeEach(() => {
browser.get(PATH_TO_TEST);
console.log('beforeEach');
});
it('should exist header', () => {
expect(element(by.css('h1')).getText()).toEqual('test');
console.log('test end');
});
});
Конфигурация транспортира:
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 30000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
onPrepare() {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
}
ОБНОВЛЕНИЕ 2
Если я добавлю browser.sleep
и browser.ignoreSynchronization
, тесты начнут работать, но затем мне нужно будет добавить browser.sleep
для каждой синхронизации, которая выглядит не очень хорошо:
beforeEach(() => {
browser.get('path/to/test');
browser.sleep(3000);
browser.ignoreSynchronization = true;
});
Похоже, что транспортир не распознает страницу как полностью загруженную или как угловую сеть.
Почему Protractor не проверяет содержимое, несмотря на то, что страница загружена правильно?