我有一个“ div”下拉列表,而不是“ select”。所以我的功能在所有地方都可以正常工作,除了不是从下拉按钮位置而是从上方打开的下拉菜单(因为下拉菜单位于页面底部)可以防止...页面滚动我猜?也许问题是打开的速度太快或太慢,所以函数通常单击的不是所需元素,而是最接近的元素之一。如果element不在下拉列表的开头,则通常以这种方式工作,因此将其滚动到该元素。有什么建议吗?
我发现的最好方法是使用动作,将移动分为元素并单击成两行(如果写成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();
}
答案 0 :(得分:0)
您是否尝试过添加笛子等待时间? 那会有所帮助。 如果您可以在该问题中共享有关DOM的信息,那也很好吗? 这是Java的示例,但我认为这也可以在js中为您提供帮助。
Foo[] foos = Iterables.toArray(x, Foo.class);
答案 1 :(得分:0)
在将鼠标移到元素上并单击之前,您尝试过滚动到期望的元素值。希望以下代码可以提供帮助:
public void selectFromDropdown(By by) {
Log.debug("selecting from dropdown by" + by);
var eleValue = wrappedWebDriver.findElement(by);
Log.debug("Scroll to element");
browser.executeScript("arguments[0].scrollIntoView();", eleValue);
waitVisibilityOfElement(by);
Actions actions = new Actions(wrappedWebDriver);
actions.moveToElement(eleValue).perform();
Log.debug("clicking dropdown item");
eleValue.click();
}
答案 2 :(得分:-1)
如果您尝试单击静态值,则可以直接从下拉列表中单击该值
您可以尝试
{{1}}