5

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

4

5 回答 5

10

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

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
}
于 2012-10-16T12:00:02.517 回答
3

它是一个 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);
于 2012-11-08T06:02:10.103 回答
2

要管理您可能遇到的任何错误,您只需使用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() 处理帖子中看到一个示例

于 2015-06-09T12:23:52.073 回答
1

如果您将 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();
})()

您无需查找与DesiredCapabilitiesCapabilities相关的任何内容,您可以使用变量填充该值options

于 2021-03-13T16:40:57.367 回答
0

尝试这样做:

DesiredCapabilities ff = DesiredCapabilities.firefox();
ff.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR  UnexpectedAlertBehaviour.ACCEPT);
于 2014-06-19T06:07:41.997 回答