量角器接受提示

Protractor Accept a Prompt

我的 AngularJS 应用程序使用 Keycloak 进行身份验证。并打开 window 提示,要求用户输入域名。

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();
        });
    });

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

我不确定你是哪个版本的量角器运行,但自从 2.0 以来,browser.waits 上的时间已经改变

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

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

您可以在没有 .then() 的情况下尝试,如下所示

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

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

I tried

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

or

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

But I still get the unexpected alert error

并且您提到在 Safari 中关闭提示一次,这是手动还是通过测试?如果是通过测试,你用什么代码来做到这一点