【问题标题】:handle JS alert using IE webdriver, Selenium使用 IE webdriver、Selenium 处理 JS 警报
【发布时间】:2013-05-13 19:45:33
【问题描述】:

我需要为基于 Java 的应用程序单击取消按钮。 我正在使用 IE 驱动程序、Eclipse IDE 并且我的应用程序仅支持 IE。[我正在使用 Java 编写脚本]

情况是这样的,

  1. 登录应用程序
  2. 有一个账户会话弹出[确认框][js] [警报有焦点,用户无法聚焦应用程序]
  3. 点击取消按钮

现在,我已成功登录,但我无法处理 JS 警报窗口。所以我无法编写更多脚本。

请帮帮我!!!

【问题讨论】:

    标签: selenium selenium-rc webdriver javascript


    【解决方案1】:

    如果您使用的是 Java,并且您使用的是 Selenium WebDriver API,那么类似以下代码的代码应该可以工作:

    driver.switchTo().alert().dismiss();
    

    并非每个驱动程序都实现了警报处理,但它应该适用于 IE。

    请记住,您始终可以在 this link 找到 WebDriver API 的 Javadocs。

    【讨论】:

    • 为什么 WebDriver 不支持 isAlertPresent API?带有 catch 块的 SwitchTo 感觉很古怪。 OTOH,如果我错过了检查警报,下一个 API 会抛出 UnhandeledAlertExe 自动解除警报。吉姆,为什么 webdriver 在抛出 Unhandeled Alert Exe 时会解除警报?假设,我不想先发制人地检查警报,这使我无法在警报发生后接受警报。询问您,因为您是 IE 驱动程序的核心贡献者,并且对关闭异常警报的决定有洞察力。谢谢
    • 您应该查看unhandledAlertBehaviour capability。它提供了您正在寻找的关于 UnhandledAlertException 是否应该关闭警报的控制。至于为什么没有 isAlertPresent() API,你得问问 API 架构师,我不是其中之一。
    • 我确实注意到了。但现在似乎只是它的 IE。似乎还没有被 FF 和 chrome 采用。但很好的补充。 WebDriver 应该允许测试作者在从第 1 天捕获未处理的警报 exe 后做出接受/拒绝决定。
    • 还有另一种观点认为,一段自动化代码的作者应该知道该自动化所采取的行动会发生什么。其他任何事情都是例外情况,这是对应该引发异常的事物的定义。如果您想要一个库来处理自动化网页时可能发生的所有意外事情,那么这取决于您构建;它超出了 WebDriver 的范围。话虽如此,这完全是错误进行此讨论的地方。其中一个邮件列表会是一个更好的场所。
    【解决方案2】:

    要在 IE 中处理警报,您需要先设置 IE 的功能:

    DesiredCapabilities capabilities = new DesiredCapabilities();          
    capabilities.setJavascriptEnabled(true);                                           capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);                                   
    capabilities.setCapability("ignoreProtectedModeSettings", true); //added this to ignore protecion mode setting so as to launch IE
    
    driver = new InternetExplorerDriver(capabilities);
    driver.get("url");
    driver.switchTo().alert().dismiss();   //or  
    driver.switchTo().alert().Accept();    // accordingly
    

    【讨论】:

    • 这些功能与警报处理没有任何关系。事实上,最好设置ignoreProtectedModeSettings 功能。 This blog post 解释了原因。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多