【发布时间】:2019-05-27 16:00:07
【问题描述】:
我有一个“div”下拉菜单,而不是“select”。所以我的功能在任何地方都可以正常工作,除了不是从下拉按钮位置打开的下拉菜单,而是从上方(因为下拉菜单放在页面底部)以防止...页面滚动我猜?也许问题是它打开得太快或太慢或什么,所以功能通常不是点击所需的元素,而是最接近它的元素之一。大多数情况下,如果元素不在下拉列表的开头,它会以这种方式工作,因此它会滚动到元素。有什么建议可以做吗?
我发现最好的方法是使用动作,将移动到元素并点击成 2 行(如果在 1 行中写入,效果会更糟)。顺便说一句,“waitVisibilityOfElement(By)”是一个带有 webdriver 等待预期条件的函数
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();
}
【问题讨论】:
-
欢迎来到!人们如何知道下拉 HTML 结构的样子,请阅读minimal reproducible example
标签: javascript java selenium selenium-webdriver