Транспортир - общее ожидание изменения URL

В предыдущих вопросах я видел, что хороший способ дождаться изменения URL-адреса - это использовать:

browser.wait( function() {
    return browser.getCurrentUrl().then(function(url) {
        return /myURL/.test(url);
    });
}, 10000, "url has not changed");`

Но я пытаюсь найти метод, который мог бы передать myURL как переменную (в случае, если мне нужно использовать его с другими сайтами), и он не работает.

Я пытаюсь это в моем файле объекта страницы:

this.waitUrl = function(myUrl) {
    browser.wait( function(myUrl) {
        return browser.getCurrentUrl().then(function(url, myUrl) {
            return myUrl.test(url);
        });
    }, 10000, "url has not changed");
};

Есть идеи, если это вообще возможно, и как это сделать, если так?

2 ответа

Решение

Обновление (июль 2016 г.): с помощью Protractor 4.0.0 вы можете решить эту проблему с помощью urlIs а также urlContains Встроенные ожидаемые условия.


Оригинальный ответ:

Не проходи myUrl внутри then Функция доступна из области функций объекта страницы:

browser.wait(function() {
    return browser.getCurrentUrl().then(function(url) {
        return myUrl.test(url);
    });
}, 10000, "url has not changed");

Хотя я бы определил это как ожидаемое условие:

function waitUrl (myUrl) {
    return function () {
        return browser.getCurrentUrl().then(function(url) {
            return myUrl.test(url);
        });
    }
}

Так что вы можете использовать его таким образом:

browser.wait(waitUrl(/my\.url/), 5000);

Для тех, кто хочет пример для Protractor 4.0.0 до 5.3.0

Вы можете использовать "ExpectedConditions", как так...

var expectedCondition = protractor.ExpectedConditions;
// Waits for the URL to contain 'login page'.
browser.wait(expectedCondition.urlContains('app/pages/login'), 5000);

Если вы хотите проверить это с помощью теста e2e.

it('should go to login page', function() {
    loginPage.login();
    const EC = protractor.ExpectedConditions;

    browser.wait(EC.urlContains('app/pages/login'), 5000).then(function(result) {
        expect(result).toEqual(true);
    });

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