【问题标题】:How to close a native web browser popup in Jasmine JS?如何在 Jasmine JS 中关闭本机 Web 浏览器弹出窗口?
【发布时间】:2015-05-20 11:28:21
【问题描述】:

如何在 Jasmine JS 中关闭原生网页浏览器弹出窗口?

我无法成功关闭此对话框,并且它一直显示在所有运行中。

请您帮忙!

代码:

describe('LiveSite Portal - Client perform a call', function() {

  it('LiveSite - Home Page', function() {
       liveSiteHome();
    });

  it('LiveSite Portal - Client perform a call', function() {

        browser.getAllWindowHandles().then(function (handles) {      
        browser.switchTo().window(handles[handles.length - 1]);

            var alertDialog = browser.switchTo().alert().thenCatch(function (e) {
                if (e.code !== 27) { throw e; }
            })
            .then(function (alert) {
                if (alert) {
                    expect(alertDialog.getText()).toEqual("External Protocol Request");
                    return alert.dismiss()
                }

            element(by.css("span.hide-sm.ng-binding")).click();
            browser.sleep(3000); 
            });

            //close the native popup
            browser.switchTo().window(handles[0]);
            browser.sleep(5000); 
        });
    });
});

实际结果:

【问题讨论】:

  • 你的最终目标是什么?你想启动一个应用程序还是什么都不做?另外,您是否与 Google Chrome 相关联,或者是否可以使用 Firefox 特定的解决方案?
  • 我想“什么都不做”,但我还需要通过 chrome 和 firefox 运行它.. @alecxe

标签: node.js google-chrome selenium jasmine protractor


【解决方案1】:

首先,您无法使用protractor/selenium 处理这种弹出窗口 - 它不是 javascript 弹出窗口,您无法切换到它或控制它。最好的办法是通过调整浏览器所需的功能和偏好来避免打开弹出窗口。

我还没有针对 google-chrome 的解决方案,但是对于 Firefox,您需要通过定义自定义 Firefox 配置文件来设置以下首选项(请参阅How To):

这样你就让 Firefox 知道不要处理外部协议链接并且什么都不做。

【讨论】:

  • 非常感谢!其实我只是想知道这个弹窗在这个测试中是打开的。
  • @IdanE 那么,您不应该测试浏览器处理外部协议的能力。希望你能明白我的意思。谢谢。
猜你喜欢
  • 2017-08-22
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2011-05-03
  • 1970-01-01
相关资源
最近更新 更多