Как решать проблемы с e2e-тестами Protractor под PhantomJS
Table of Contents
Возникла проблема.
Раньше e2e-тесты нормально отрабатывали в PhantomJS.
И в какой-то момент один из тестов перестал проходить в PhantomJS в 100% случаев.
При этом при запуске на той же машине, к примеру, в Chrome, отрабатывают корректно.
Даже если давать фантому ссылку на уже работающий сервер, который работает без ошибок, то один тест валится — и всё.
Гугление привело к очевидному выводу, что это бага PhantomJS.
Вот тут есть небольшое описание, что делать в случае, если тесты валятся с конкретной ошибкой.
No element found using locator: by.model() error
1 2 3 4 |
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
1 2 3 4 |
beforeEach(function() { ptor = protractor.getInstance(); ptor.ignoreSynchronization = true; }); |
Protractor: How to wait for page complete after click a button?
1 |
browser.waitForAngular(); |
или
1 2 3 |
btnLoginEl.click().then(function() { // do some stuff }); |
Ну а для меня более-менее подошло вот такое сочетание:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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('/'); |
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.