Подтвердить что ты не робот

Заставить Protractor ждать оповещения?

Я пишу E2E-тесты для страницы входа в систему. Если вход в систему завершается неудачно, появляется окно предупреждения, информирующее пользователя о недопустимом имени пользователя или пароле. Сам журнал - это вызов веб-службы, и контроллер обрабатывает обратный вызов. Когда я использую browser.switchTo().alert(); в Protractor, это происходит до завершения обратного вызова. Есть ли способ заставить Protractor ждать появления этого окна предупреждения?

4b9b3361

Ответ 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();
};