如何在Selenium中处理具有“UnexpectedAlertBehaviour”function的警报?

在selenium framework 2.25中,我看到我们有UnexpectedAlertBehaviour枚举类型,但我不知道如何使用它。

我在你的问题上找到了这部分文档:这对其他人也有用:

v2.25.0

=======

的webdriver:

  • 添加了用于处理BASIC和DIGEST身份validation的API

    对话框。 目前未在任何驱动程序中实现。

  • 警告IE驱动程序将不再使用DLL的用户

    下一个版本。

  • 不推荐使用的浏览器特定WebElement子类。

  • 添加了对“requiredCapabilities”的支持到远程webdrivers

    并在firefox中实现了对这些的基本支持

    驱动程序。 未能满足所需的能力将导致a

    要抛出的SessionNotCreatedException。

  • 添加了确定应如何处理未处理警报的function。 这由“unexpectedAlertBehaviour”function处理,该function可以是“接受”,“解雇”或“忽略”之一。 Java代码应该使用UnexpectedAlertBehaviour枚举。 这只在Firefox中实现。

  • 允许在Firefox和中配置本机事件

    (实验性地)在IE中使用“nativeEvents”function。

  • 将受支持的Firefox版本更新为17。

…..

这里提供了整个清单

这是源头

package org.openqa.selenium; public enum UnexpectedAlertBehaviour { ACCEPT ("accept"), DISMISS ("dismiss"), IGNORE ("ignore") ; private String text; private UnexpectedAlertBehaviour(String text) { this.text = text; } @Override public String toString() { return String.valueOf(text); } public static UnexpectedAlertBehaviour fromString(String text) { if (text != null) { for (UnexpectedAlertBehaviour b : UnexpectedAlertBehaviour.values()) { if (text.equalsIgnoreCase(b.text)) { return b; } } } return null; } } 

我看到你使用unexpectedAlertBehaviour来决定警报是否未处理,如果是,那么你将决定如何处理它。

我想它应该是(我的假设):

 try{ alert.accept(); } catch(org.openqa.selenium.UnexpectedAlertBehaviour){ ///...blablabla } 

它是CapabilityType,因此您必须在创建驱动程序时传递的DesiredCapabilities中表达它。 在Python中,我使用以下代码将此行为添加到我的FireFox驱动程序:

  selenium.webdriver.DesiredCapabilities.FIREFOX["unexpectedAlertBehaviour"] = "accept" 

我没有测试过这个Java,但理论上它应该可以工作:

 DesiredCapabilities cap = new DesiredCapabailities(); cap.setPreference(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, org.openqa.selenium.UnexpectedAlertBehaviour.ACCEPT); WebDriver driver = new FirefoxDriver(cap); 

尝试这样做:

 DesiredCapabilities ff = DesiredCapabilities.firefox(); ff.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR UnexpectedAlertBehaviour.ACCEPT); 

要管理您可以获得的任何错误,您只需使用Exception NAMEERROR进入try / block,如下所示:

 from selenium.common.exceptions import UnexpectedAlertBehaviour from selenium.common.exceptions import UnexpectedAlertPresentException try: var = driver.some_function() return True except UnexpectedAlertBehaviour: print "We have raised the UnexpectedAlertBehaviour" return False except UnexpectedAlertPresentException: print "UnexpectedAlertPresentException" return False 

我知道这段代码不是Java,但基础是一样的。 尝试/捕获例外名称。 你可以在我的alert()处理post上看到这个例子