在 selenium 框架 2.25 中,我看到我们有 UnexpectedAlertBehaviour 枚举类型,但我不知道如何使用它。
5 回答
我在您的问题上找到了这部分文档:这对其他人也可能有用:
v2.25.0
=======
网络驱动程序:
添加了处理 BASIC 和 DIGEST 身份验证的 API
对话框。目前未在任何驱动程序中实现。
警告用户 IE 驱动程序将不再使用 DLL
下一个版本。
不推荐使用浏览器特定的 WebElement 子类。
向远程 webdrivers 添加了对“requiredCapabilities”的支持
并在 Firefox 中实现了对这些的基本支持
司机。未能满足所需的能力将导致
SessionNotCreatedException 被抛出。
添加了确定应如何处理未处理警报的能力。这由“unexpectedAlertBehaviour”功能处理,它可以是“accept”、“dismiss”或“ignore”之一。Java 代码应使用 UnexpectedAlertBehaviour 枚举。这目前仅在 Firefox 中实现。
允许在 Firefox 中配置本机事件和
(实验性地)在 IE 中使用“nativeEvents”功能。
将受支持的 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);
要管理您可能遇到的任何错误,您只需使用Exception NAMEERROR
这样的尝试/块:
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 编写的,但基础是一样的。尝试/捕获异常名称。您可以在我的 alerts() 处理帖子中看到一个示例
如果您将 Selenium 与 NodeJS 一起使用,那么您可以使用options.setAlertBehavior(UserPromptHandler.ACCEPT)
.
完整示例(打字稿):
import { Builder } from 'selenium-webdriver';
import { Options } from 'selenium-webdriver/chrome';
import { UserPromptHandler } from 'selenium-webdriver/lib/capabilities';
(async () => {
let options = new Options()
options.addArguments(`--user-data-dir=./profile`)
options.addArguments(`--no-sandbox`)
options.windowSize({ width: 1280, height: 720 })
options.setAlertBehavior(UserPromptHandler.ACCEPT)
let driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
})()
您无需查找与DesiredCapabilities或Capabilities相关的任何内容,您可以使用变量填充该值options
。
尝试这样做:
DesiredCapabilities ff = DesiredCapabilities.firefox();
ff.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR UnexpectedAlertBehaviour.ACCEPT);