0

我已将我的 Selenium 框架升级到最新版本。在执行代码期间,我收到以下异常

例外

org.openqa.selenium.InvalidArgumentException: 
Invalid capabilities in alwaysMatch: unhandledPromptBehavior is type boolean instead of string

细节 :

Selenium:3.7.1 IE:3.7.0(32 位驱动程序)java.version:'1.8.0_144'

自动化代码适用于我较旧的 IE 驱动程序(32 位)- 3.4.0。

请提出您的意见以解决该错误。

capabilities.setCapability("UNHANDLED_PROMPT_BEHAVIOUR" ,false);
                    capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
                    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
                    capabilities.setCapability(CapabilityType.SUPPORTS_ALERTS, true);
                    capabilities.setCapability(InternetExplorerDriver.UNEXPECTED_ALERT_BEHAVIOR, true);
                    capabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
                    capabilities.setCapability(InternetExplorerDriver.ENABLE_ELEMENT_CACHE_CLEANUP, true);
                    capabilities.setCapability("nativeEvents", false);
                    capabilities.setCapability("requireWindowFocus", false);
                    capabilities.setJavascriptEnabled(true);
                    capabilities.setCapability("ignoreProtectedModeSettings", true);
                    System.setProperty("webdriver.ie.driver", ieExe.getAbsolutePath());
                    opt = new InternetExplorerOptions();
                    opt.merge(capabilities);
                    driver = new InternetExplorerDriver(opt);
                    driver.manage().deleteAllCookies();
driver.manage().window().maximize();
4

4 回答 4

3

简而言之:

  • 有效的能力名称是:"unhandledPromptBehavior"
  • "unhandledPromptBehavior"AND 的有效值为"unexpectedAlertBehavior""accept", "dismiss", "accept and notify", "dismiss and notify", "ignore". 但 W3C仅支持 1st 和 2nd

详细说明:

UNHANDLED_PROMPT_BEHAVIOUR 是CapabilityType接口中的常量名称。但是您将其用作字符串。所以要么capabilities.setCapability("unhandledPromptBehavior", ...)capabilities.setCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR, ...)

这些功能的值在 enum 中遇到org.openqa.selenium.UnexpectedAlertBehaviour:这是因为在 webdriver3 中unhandledPromptBehavior是新的更新名称。unexpectedAlertBehaviour实际上,当您设置unexpectedAlertBehaviour时,webdriver (v3.8) 会自动设置这两个值

所以你的错误的根本原因是行 capabilities.setCapability(InternetExplorerDriver.UNEXPECTED_ALERT_BEHAVIOR, true)::

您应该替换true为有效值(见上文)。这一行实际上设置了两个功能:unhandledPromptBehaviorunexpectedAlertBehaviour. 您的第一行(带有“UNHANDLED_PROMPT_BEHAVIOR”)只是被驱动程序忽略了。

于 2018-01-05T12:07:00.787 回答
1

我能够通过以下更改“capabilities.setCapability(InternetExplorerDriver.UNEXPECTED_ALERT_BEHAVIOR, UnexpectedAlertBehaviour.IGNORE);”解决问题

于 2017-11-23T07:12:01.290 回答
0

错误InvalidArgumentException: Invalid capabilities in alwaysMatch: unhandledPromptBehavior is type boolean instead of string Details说确实谈到了主要问题。

正如你所提到IE Driver的,我想问题出在Internet ExplorerandIEDriverServer.exe上。要解决问题setCapability("UNHANDLED_PROMPT_BEHAVIOUR", "accept"),请按照以下代码块使用:

System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("UNHANDLED_PROMPT_BEHAVIOUR", "accept");
InternetExplorerOptions opt = new InternetExplorerOptions();
opt.merge(capabilities);
WebDriver driver = new InternetExplorerDriver(opt);
于 2017-11-21T11:40:16.073 回答
0

注意:FirefoxDriver(Capabilities desiredCapabilities),这个构造函数在 selenium 3.141.0 中被弃用(我正在使用大约 3.141.0 以后),所以你不能将 Capabilities 类对象传递给 webDriver 构造函数。要将 Capabilities 功能传递给 webDriver 构造函数,请使用 FirefoxOptions 类对象并将其对象传递给 WebDriver 构造函数。

FirefoxOptions options = new FirefoxOptions();
options.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.IGNORE);
WebDriver driver = new FirefoxDriver(options);
System.setProperty("webdriver.gecko.driver", "path-to gecko-driver");
driver.get("url");
Alert alert=driver.switchTo().alert();
 driver.findElement(By.id("username")).sendKeys("username");
 driver.findElement(By.id("password")).sendKeys("Pwd");
 driver.switchTo().alert().accept();
 driver.switchTo().defaultContent();
于 2020-02-13T08:36:12.460 回答