Как решать проблемы с e2e-тестами Protractor под PhantomJS
Table of Contents
Возникла проблема.
Раньше e2e-тесты нормально отрабатывали в PhantomJS.
И в какой-то момент один из тестов перестал проходить в PhantomJS в 100% случаев.
При этом при запуске на той же машине, к примеру, в Chrome, отрабатывают корректно.
Даже если давать фантому ссылку на уже работающий сервер, который работает без ошибок, то один тест валится — и всё.
Гугление привело к очевидному выводу, что это бага PhantomJS.
Вот тут есть небольшое описание, что делать в случае, если тесты валятся с конкретной ошибкой.
No element found using locator: by.model() error
beforeEach(function() {
ptor = protractor.getInstance();
ptor.waitForAngular();
});
http://stackoverflow.com/questions/22949712/no-element-found-using-locator-by-model-error
Protractor times out waiting for sync with page when using $resource
beforeEach(function() {
ptor = protractor.getInstance();
ptor.ignoreSynchronization = true;
});
Protractor: How to wait for page complete after click a button?
browser.waitForAngular();
или
btnLoginEl.click().then(function() {
// do some stuff
});
Ну а для меня более-менее подошло вот такое сочетание:
function setIgnoreSynchronization(val)
{
browser.ignoreSynchronization = !! val;
ptor && (ptor.ignoreSynchronization = !! val);
}
...
beforeEach(function() {
ptor = protractor.getInstance();
setIgnoreSynchronization(true);
ptor.waitForAngular();
browser.driver.manage().window().setSize(1280, 1024);
});
afterEach(function () {
browser.manage().logs().get('browser').then(function(browserLogs) {
var msg = '';
// browserLogs is an array of objects with level and message fields
browserLogs.forEach(function(log) {
if (log.level.value > 900) { // it's an error log
msg += log.message;
}
});
// there can be some errors, so you could turn that off
if (msg.length) {
throw new Error('errors in console:\n' + msg);
}
});
});
...
// где надо
setIgnoreSynchronization(false);
browser.get('/');
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.