我正在使用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)如何点击第二个菜单并选择一个选项?
编辑:我尝试了在类似问题中找到的解决方案;不幸的是它不起作用。解决方案是添加显式等待,因为元素可能没有完全加载,这只会导致超时。
答案 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