У меня выпадающий список "div", а не "select". Так что моя функция работает хорошо везде, кроме dropdows, которые открываются не с места выпадающего меню, а сверху (потому что выпадающий список находится внизу страницы), чтобы предотвратить ... прокрутку страницы, я полагаю? Возможно, проблема в том, что он открывается слишком быстро или слишком медленно или что-то еще, поэтому функция обычно щелкает не нужный элемент, а один из ближайших к нему. В основном это работает так, если элемент не находится в начале выпадающего списка, поэтому он прокручивается до элемента. Любые предложения, что можно сделать?
Лучший способ, который я нашел, - это использовать действия, разбивая перемещение на элемент и щелкая мышью на 2 строки (работает намного хуже, если писать в 1 строку). Кстати, «waitVisibilityOfElement (By)» - это функция с ожиданием ожидающего состояния веб-драйвером
public void selectFromDropdown(By by) {
Log.debug("selecting from dropdown by" + by);
waitVisibilityOfElement(by);
Actions actions = new Actions(wrappedWebDriver);
actions.moveToElement(wrappedWebDriver.findElement(by)).perform();
Log.debug("clicking dropdown item");
wrappedWebDriver.findElement(by).click();
}
Я ожидаю, что нужно щелкнуть нужный элемент, но обычно он щелкает по другому
Хорошо, с некоторой помощью я пришел к окончательному решению, которое является лучшим способом выбора выпадающих фильтров без использования каких-либо функций .sleep (), если другие простые способы вам не подходят.
public void selectFromDropdown(By by) {
Log.debug("selecting from dropdown by" + by);
WebElement eleV = wrappedWebDriver.findElement(by);
waitVisibilityOfElement(by);
JavascriptExecutor js = (JavascriptExecutor) wrappedWebDriver;
js.executeScript("arguments[0].scrollIntoView();", eleV);
Actions actions = new Actions(wrappedWebDriver);
actions.moveToElement(wrappedWebDriver.findElement(by)).perform();
Log.debug("clicking dropdown item");
wrappedWebDriver.findElement(by).click();
}