让量角器等待警报框?

时间:2014-06-04 12:29:04

标签: angularjs protractor

我正在为登录页面编写E2E测试。如果登录失败,则会弹出一个警告框,通知用户无效的用户名或密码。登录本身是对Web服务的调用,控制器正在处理回调。当我在Protractor中使用browser.switchTo().alert();时,它会在回调结束之前发生。有没有办法让Protractor等待弹出警报框?

2 个答案:

答案 0 :(得分:18)

我在量角器测试中使用以下语句解决了类似的任务:

browser.wait(function() {
    return browser.switchTo().alert().then(
        function() { return true; }, 
        function() { return false; }
    );
});

通常,此代码会一直尝试切换到警报,直到成功(最后打开警报)。更多细节:
" browser.wait"等待被调用的函数返回true " browser.switchTo()警报()"尝试切换到已打开的警报框,并且成功或失败 自" browser.switchTo()。alert()"返回一个promise,然后promise被解析,第一个函数运行(返回true),或者被拒绝,第二个函数运行(返回false)。

答案 1 :(得分:9)

您现在可以使用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();
};