Как вы опрашиваете условие в Intern/Leadfoot (не на стороне браузера/клиента)?

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

Я использую pollUntil для проверки клиентской части URL, но это приводит к Detected a page unload event; script execution does not work across page loads. по крайней мере в Safari. Я могу добавить сон, но мне было интересно, есть ли лучший способ.

Вопросы:

  1. Как вы можете опросить что-то вроде this.remote.getCurrentUrl()? По сути, я хочу сделать что-то вроде this.remote.waitForCurrentUrlToEqual(...), но мне также любопытно, как опрашивать что-либо из команд Selenium по сравнению с использованием pollUntil, который выполняет код в удаленном браузере.

  2. Я проверяю, попал ли пользователь на защищенный URL-адрес после входа в систему здесь. Есть ли лучший способ проверить это, кроме опроса?

  3. Лучшие практики: нужно ли мне делать утверждение с помощью Chai или это вообще возможно, когда я опрашиваю и жду чего-то в качестве теста? Например, в этом случае я просто пытаюсь провести опрос, чтобы убедиться, что мы оказались на правильном URL-адресе в течение 30 секунд, и у меня нет явного утверждения. Я просто предполагаю, что тест провалится, но не скажу, почему. Если лучше всего сделать утверждение здесь, как мне сделать это здесь или в любое время, когда я использую ожидание?

Вот пример моего кода:

'create new account': function() {
  return this.remote
    // Hidden: populate all account details
    .findByClassName('nextButton')
      .click()
      .end()
    .then(pollUntil('return location.pathname === "/protected-page" ? true : null', [], 30000));
}

person jon_wu    schedule 04.08.2014    source источник


Ответы (1)


Помощник pollUntil работает, запуская асинхронный скрипт в браузере для проверки условия, поэтому он не будет работать при загрузке страницы (поскольку скрипт исчезает при загрузке страницы). Одним из способов опроса текущего удаленного URL-адреса было бы написать средство опроса, которое будет выполняться как часть вашего функционального теста, например (не проверено):

function pollUrl(remote, targetUrl, timeout) {
    return function () {
        var dfd = new Deferred();
        var endTime = Number(new Date()) + timeout;

        (function poll() {
            remote.getCurrentUrl().then(function (url) {
                if (url === targetUrl) {
                    dfd.resolve();
                }
                else if (Number(new Date()) < endTime) {
                    setTimeout(poll, 500);
                }
                else {
                    var error = new Error('timed out; final url is ' + url);
                    dfd.reject(error);
                }
            });
        })();

        return dfd.promise;
    }
}

Вы могли бы назвать это как:

.then(pollUrl(this.remote, '/protected-page', 30000))

Когда вы используете что-то вроде pollUntil, нет необходимости (или места) делать утверждение. Однако с помощью вашей собственной функции опроса вы можете отклонить обещание с информативной ошибкой.

person jason0x43    schedule 21.08.2014