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