量角器接受提示

时间:2015-07-24 08:31:07

标签: angularjs selenium window protractor prompt

我的AngularJS应用程序使用Keycloak进行身份验证。然后它会打开一个窗口提示,要求用户输入域名。

angular.element(document).ready(function () {
var domain;
if (Modernizr.localstorage) {
    domain = window.localStorage['com.example.domain'];
}
if (!domain) {
    domain = window.prompt("Enter your customer domain:\n\nNote: This has to be entered only once.", "example.com");
    if (domain && Modernizr.localstorage) {
        window.localStorage['com.example.domain'] = domain;
    }
}

如果我使用safari运行我的测试,我可以关闭此提示一次,使用Keycloak登录并且其他所有测试都成功运行。但是在chrome中,每次运行测试时都会打开此提示符。

如何让Chrome关闭此提示并继续登录页面?

我试过

 browser.wait(EC.alertIsPresent()).then(function () {
        browser.driver.switchTo().alert().then(function (alert) {
            alert.accept();
        });
    });

 browser.wait(EC.alertIsPresent()).then(function () {
        browser.driver.switchTo().alert().then(function (alert) {
            alert.accept();
        });
    });

但我仍然收到意外警告错误

1 个答案:

答案 0 :(得分:2)

我不确定您正在运行哪个版本的量角器,但自从2.0以来,浏览器上的时间已经发生变化

"由于WebDriverJS的更改,现在默认等待没有超时 等待0毫秒而不是无限期等待。"

https://github.com/angular/protractor/blob/master/CHANGELOG.md#breaking-changes

您可以尝试不使用.then(),如下所示

browser.wait(EC.alertIsPresent(), 5000);
browser.switchTo().alert().accept();

我也注意到你提到尝试两种不同的东西,但我相信你写了一个错字,因为它们都是一样的。

  

我试过

 browser.wait(EC.alertIsPresent()).then(function () {
        browser.driver.switchTo().alert().then(function (alert) {
            alert.accept();
        });
    }); 
     

 browser.wait(EC.alertIsPresent()).then(function () {
        browser.driver.switchTo().alert().then(function (alert) {
            alert.accept();
        });
    }); 
     

但我仍然收到意外警告错误

你提到在Safari中关闭提示一次,是手动还是通过测试?如果是通过测试,您使用的代码是什么