Я пишу E2E-тесты для страницы входа в систему. Если вход в систему завершается неудачно, появляется окно предупреждения, информирующее пользователя о недопустимом имени пользователя или пароле. Сам журнал - это вызов веб-службы, и контроллер обрабатывает обратный вызов. Когда я использую browser.switchTo().alert();
в Protractor, это происходит до завершения обратного вызова. Есть ли способ заставить Protractor ждать появления этого окна предупреждения?
Заставить Protractor ждать оповещения?
Ответ 1
Я решил аналогичную задачу со следующим утверждением в тесте Protractor:
browser.wait(function() {
return browser.switchTo().alert().then(
function() { return true; },
function() { return false; }
);
});
В общем, этот код постоянно пытается переключиться на предупреждение до достижения успеха (когда предупреждение наконец откроется). Еще несколько деталей:
"browser.wait" ожидает, пока вызываемая функция вернет true.
"browser.switchTo(). alert()" пытается переключиться на открытое поле оповещения и либо имеет успех, либо не работает.
Поскольку "browser.switchTo(). Alert()" возвращает обещание, то обещание либо разрешено, либо первая функция запускается (возвращает true), либо отклоняется, а вторая выполняется (возвращает false).
Ответ 2
Теперь вы можете использовать библиотеку ExpectedConditions, которая делает код более читаемым:
function openAndCloseAlert () {
var alertButton = $('#alertbutton');
alertButton.click();
// wait up to 1000ms for alert to pop up.
browser.wait(protractor.ExpectedConditions.alertIsPresent(), 1000);
var alertDialog = browser.switchTo().alert();
expect(alertDialog.getText()).toEqual('Hello');
alertDialog.accept();
};