元素无法滚动到视图中(即使它就在那里)Selenium

时间:2018-02-19 23:30:59

标签: java selenium drop-down-menu

我正在使用Selenium在具有多个下拉菜单的页面上运行测试(特别是弹出页面,允许您选择一些选项然后关闭它)。我可以完全点击这些菜单中的一些;但是,有些人抛出ElementNotInteractable异常,消息“元素无法滚动到视图中”,即使菜单正好在彼此旁边。我很困惑为什么一个菜单有效,另一个菜单看起来不一样。我点击菜单时尝试的三件事是:

a)定期Selenium点击:

driver.findElement(By.xpath("//select[@foo='bar']").click();


这适用于其他菜单,除了我直接导航到“选项”标签并点击它(不需要先点击下拉菜单)

b)Javascript执行者

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);


当我使用它时,不会抛出异常;但是,菜单仍然是空的,这让我相信它没有被点击。

c)中操作

Actions builder = new Actions(driver);
builder.moveToElement(menu).click(menu);
builder.perform();


由于某种原因,当我使用它时,整个弹出窗口上的下拉菜单关闭。 :/(我已经仔细检查过它不是点击的关闭按钮)

我不确定这是否相关,但是Selenium找到元素没有问题,只是当我试图点击它时它会抱怨它。

总结一下,我的问题是:
1)什么可以使菜单不同,以便一个可点击而一个不是?
2)如何点击第二个菜单并选择一个选项?

编辑:我尝试了在类似问题中找到的解决方案;不幸的是它不起作用。解决方案是添加显式等待,因为元素可能没有完全加载,这只会导致超时。

1 个答案:

答案 0 :(得分:0)

使用JavascriptExecutor是一种与不可交互元素交互的解决方法。我认为它永远不应该用于硒测试,因为它使测试做的事情是真实用户在现实生活中无法做到的事情。

最合理的原因是您正在与错误的元素进行交互,请尝试调试以识别使用的选择器返回的元素。

您可以在调试模式下使用chrome dev工具: 1-在例外行放置一个断点, 2-在chrome控制台中使用as.POSIXct(Df$Date,format='%Y-%m-%d',tz= "UTC")来获取元素。

要选择值,您可以使用$x("//select[@foo='bar']")对象:

org.openqa.selenium.support.ui.Select