Java 如何处理带有“警告”的警报;出人意料的行为”;硒的能力?

Java 如何处理带有“警告”的警报;出人意料的行为”;硒的能力?,java,selenium,Java,Selenium,在selenium framework 2.25中,我看到我们使用了意外的AlertBehaviour枚举类型,但我不知道如何使用它。我找到了关于您的问题的这部分文档: 这也可能对其他人有用: v2.25.0 ======= 网络驱动程序: 添加了用于处理基本和摘要身份验证的API 对话。目前没有在任何驱动程序中实现 警告用户IE驱动程序将不再使用中的DLL 下一版本 不推荐使用浏览器特定的WebElement子类 为远程webdrivers添加了对“requiredCapabilities”

在selenium framework 2.25中,我看到我们使用了意外的AlertBehaviour枚举类型,但我不知道如何使用它。

我找到了关于您的问题的这部分文档: 这也可能对其他人有用:

v2.25.0

=======

网络驱动程序:

  • 添加了用于处理基本和摘要身份验证的API

    对话。目前没有在任何驱动程序中实现

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

    下一版本

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

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

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

    司机。未能充分利用所需能力将导致

    要抛出的SessionNotCreatedException

  • 增加了确定如何处理未处理警报的功能 处理。这是由“出人意料的行为人”处理的 能力,可以是“接受”、“驳回”或 “忽略”。Java代码应该使用意想不到的AlertBehaviour 枚举。这目前只在Firefox中实现。

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

    (实验)在IE中使用“nativeEvents”功能

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

提供了完整的清单

A这里是

正如我看到的,您使用unexpectedAlertBehaviour来决定警报是否未处理,如果是,您将决定如何处理它

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


它是一个CapabilityType,因此您必须用创建驱动程序时传递的所需功能来表达它。在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);

要管理可能出现的任何错误,只需使用
异常名称error
将其放入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编写的,但基础是一样的。使用异常名称尝试/捕获。您可以在我关于alerts()处理的帖子中看到一个例子,如果您将Selenium与NodeJS一起使用,那么您可以使用选项.setAlertBehavior(UserPromptHandler.ACCEPT)

完整示例(Typescript):


从“selenium webdriver”导入{Builder};
从“selenium webdriver/chrome”导入{Options};
从“selenium webdriver/lib/capabilities”导入{UserPromptHandler};
(异步()=>{
让选项=新选项()
options.addArguments(`--user data dir=./profile`)
options.addArguments(`--no sandbox`)
options.windowSize({宽度:1280,高度:720})
options.setAlertBehavior(UserPromptHandler.ACCEPT)
让driver=wait new Builder().forBrowser('chrome').setChromeOptions(options).build();
})()

您不需要查找与所需功能功能相关的任何内容,您可以使用
选项
变量填充该值。

我不这么认为。事实上,UnexpectedAlertBehaviour不是alert.accept()引发的异常。这是一个枚举,不是要引发或捕获的异常。Nice@xyz,我看到了您的“words”徽标。你还有一个沙钟在上面:这是根本原因吗?对fxdriver.modals.clearFlag的绕过调用\u。。。查阅
DesiredCapabilities ff = DesiredCapabilities.firefox();
ff.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR  UnexpectedAlertBehaviour.ACCEPT);
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