javascript - 从“div”下拉列表中选择元素 - Selenium
问题描述
我有一个“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();
}
解决方案
您是否尝试在单击之前添加长笛等待?这可能会有所帮助。如果您可以在该问题中分享有关 DOM 的信息,那也很棒吗?这是 java 的一个示例,但我认为这也可以在 js 中为您提供帮助。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
推荐阅读
- ios - 我没有在我的 iOS 应用程序中收到推送通知 Firebase
- excel - 指定命令行的 VBA 脚本问题
- flutter - 在颤动中更改时如何停止高程动画?
- git - 如何删除 github 存储库中的文件以将文件添加到 .gitignore?
- python - 使用 hashlib 的更新方法时如何禁用连接?
- c++ - C++中有关面向对象编程理论的问题
- c# - 既不是空也不是类型检查检测被破坏的对象/组件?
- android - BroadcastReceiver 不适用于 PendingIntent(...)
- python - 为 Pandas 中的新列赋值
- google-apps-script - Google 脚本上的 CopyTo Paste Values 粘贴空白