Недопустимые возможности в AlwaysMatch: unhandledPromptBehavior имеет тип boolean вместо string

Я обновил свой Selenium Framework до последней версии. Во время выполнения кода я получаю следующее исключение

Исключение:

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();

3 ответа

Короче:

  • Допустимое имя возможности: "unhandledPromptBehavior"
  • Допустимые значения для "unhandledPromptBehavior" И для "unexpectedAlertBehavior" являются: "accept", "dismiss", "accept and notify", "dismiss and notify", "ignore", Но W3C поддерживает только 1-й и 2-й.

Подробно:

UNHANDLED_PROMPT_BEHAVIOUR - это постоянное имя из CapabilityType интерфейс. Но вы используете это как строку. Так что либо capabilities.setCapability("unhandledPromptBehavior", ...) или же capabilities.setCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR, ...)

Значения этих возможностей указаны в enum org.openqa.selenium.UnexpectedAlertBehaviour: это потому что unhandledPromptBehavior новое обновленное имя для unexpectedAlertBehaviour в webdriver3. На самом деле, когда вы устанавливаете непредусмотренное оповещение о поведении, веб-драйвер (v3.8) автоматически устанавливает оба значения.

Таким образом, основной причиной вашей ошибки является строка:capabilities.setCapability(InternetExplorerDriver.UNEXPECTED_ALERT_BEHAVIOR, true):

Вы должны заменить true к действительному значению (см. выше). Эта строка фактически устанавливает обе возможности: unhandledPromptBehavior а также unexpectedAlertBehaviour, Ваша первая строка (с "UNHANDLED_PROMPT_BEHAVIOR") просто проигнорирована драйвером.

Мне удалось решить проблему с изменением ниже "powers.setCapability(InternetExplorerDriver.UNEXPECTED_ALERT_BEHAVIOR, UnexpectedAlertBehaviour.IGNORE);"

Ошибка InvalidArgumentException: Invalid capabilities in alwaysMatch: unhandledPromptBehavior is type boolean instead of string Details говорит говорит о главной проблеме.

Как вы упомянули IE Driver так что я думаю, что проблема с Internet Explorer а также IEDriverServer.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);

Примечание. FirefoxDriver(Capabilities желаемых возможностей), этот конструктор устарел в 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();
Другие вопросы по тегам