На вспомогательной функции транспортира, как я могу узнать, был ли когда-либо вызван browser.get?

Я создаю вспомогательную функцию для моих тестов транспортира для входа в приложение, только если это необходимо.

Это полезно для того, чтобы я мог выполнять каждый тест изолированно для его отладки, и при запуске всего комплекта я получаю небольшое повышение производительности от того, что мне не нужно входить в систему перед каждым тестом.

Я должен войти в систему в двух ситуациях:

  1. Если ни одна страница не была загружена (browser.get() не назывался).
  2. Мы находимся на странице, но еще не вошли в систему.

Ситуация 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 или ваш "элемент входа". Но это должно дать вам толчок.

Другие вопросы по тегам