На вспомогательной функции транспортира, как я могу узнать, был ли когда-либо вызван browser.get?
Я создаю вспомогательную функцию для моих тестов транспортира для входа в приложение, только если это необходимо.
Это полезно для того, чтобы я мог выполнять каждый тест изолированно для его отладки, и при запуске всего комплекта я получаю небольшое повышение производительности от того, что мне не нужно входить в систему перед каждым тестом.
Я должен войти в систему в двух ситуациях:
- Если ни одна страница не была загружена (
browser.get()
не назывался). - Мы находимся на странице, но еще не вошли в систему.
Ситуация 2 проста. В приложении есть элемент, который отображается на всех страницах, когда пользователь вошел в систему.
Сложная часть - 1. Если я пытаюсь найти элемент, который указывает, что пользователь вошел в систему, прежде чем я загружу какие-либо страницы, я получаю следующую ошибку:
Error while waiting for Protractor to sync with the page: "angular could not be found on the window"
И я не увидел ничего в API-интерфейсе транспортира или исходном коде, который мог бы помочь мне определить, были ли загружены какие-либо страницы.
Любые указатели приветствуются.
1 ответ
Хороший вопрос, хотя я не думаю, что стоит делать тесты в недетерминированном состоянии после того, как вы что-то сделаете.
Единственный способ узнать, был ли вызван get, о котором я могу думать, это проверить, что browser.driver.getCurrentUrl()
возвращает желаемый URL или не возвращает about:blank. Но вам придется подождать некоторое время, потому что getCurrentUrl возвращает about: blank даже после вызова get, но страница загружена не полностью. Так что я бы сделал что-то вроде этого:
beforeEach(function() {
EC = protractor.ExpectedConditions;
var URL;
browser.ignoreSynchronization = true;
//get rid of automatic check that would give you the "Protractor Sync Error"
browser.wait(EC.presenceOf($('.ng-scope')),500)
.then(function(){},function(err) {
console.log(err)
browser.driver.getCurrentUrl().then(function(url) {
URL = url;
if(URL == "about:blank"){
console.log('no get before');
// your login function here - no get was called before this wait
}
});
});
browser.ignoreSynchronization = false;
});
Вопрос в том, нужно ли вам проверять about: blank, потому что в вашем случае может быть достаточно проверить этот.ng-scope или ваш "элемент входа". Но это должно дать вам толчок.