如何在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上看到这个例子
- Selenium Select – 选择部分文本的下拉选项
- 除了给出transient关键字之外,我们能否从序列化中拒绝java对象
- 将JLabel置于JLabel之上,其中包含图像
- 获取正在运行的java进程的java版本
- Spring数据mongodb查询自动将String转换为ObjectId
- Mapreduce作业运行,并且有一个例外
- 当高吞吐量(3GB / s)文件系统可用时,如何使用Java中的多个线程读取文件
- 无法获得apache nutch来抓取 – 权限和JAVA_HOME被怀疑
- 如何在Wildfly 8上的Picketbox / Undertow中捕获FailedLoginException以应用CORS