让量角器等待警报框?

Jus*_*tin 14 angularjs protractor

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

a-b*_*kov 18

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

browser.wait(function() {
    return browser.switchTo().alert().then(
        function() { return true; }, 
        function() { return false; }
    );
});
Run Code Online (Sandbox Code Playgroud)

通常,此代码不断尝试切换到警报,直到成功(最后打开警报).更多细节:
"browser.wait"等待被调用的函数返回true.
"browser.switchTo().alert()"尝试切换到打开的警告框,并且成功或失败.
由于"browser.switchTo().警报()"返回一个承诺,那么无论解决的承诺和第一功能运行(返回true),或拒绝,第二个函数运行(返回false).


han*_*uan 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();
};
Run Code Online (Sandbox Code Playgroud)