Поскольку Selenium API пытается быть «ориентированным на пользователя», он не позволяет взаимодействовать с невидимыми элементами.Есть два подхода, которые вы можете попробовать:
1) Нажмите на элемент select
, затем выполните явное ожидание, чтобы option
стал видимым.Это полезно, если на странице используется JavaScript для отображения опций выбора, которые могут вызвать небольшую задержку.
By bySelect = By.id("id_of_select_element");
By byOption = new ByChained(bySelect, By.xpath(".//option[contains(text(), 'text_of_option')]");
WebElement select = driver.findElement(bySelect);
select.click();
try {
// wait at-most 5 seconds for element to become visible
WebElement option = new WebDriverWait(driver, 5)
.until(ExpectedConditions.visibilityOfElementLocated(byOption)));
} catch(TimeoutException t) {
System.err.println("Timed out while waiting for dropdown to become visible: " + byOption.toString());
}
2) Если вышеприведенное не работает, вы можете быть немного более агрессивным и выполнить некоторый JavaScriptзаставить option
быть выбранным.Это рекомендуется только в крайнем случае.
public void selectDropdownByText(WebDriver driver, WebElement select, String text) {
((JavascriptExecutor) driver).executeScript(
"var select = arguments[0]; for(var i = 0; i < select.options.length; i++) {if(select.options[i].text == arguments[1]) {select.options[i].selected = true; }}", select, text);
}