【问题标题】:Element could not be scrolled into view (even though it is right there) Selenium元素无法滚动到视图中(即使它就在那里) Selenium
【发布时间】:2018-03-08 12:11:09
【问题描述】:

我正在使用 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) 如何点击第二个菜单并选择一个选项?

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

【问题讨论】:

标签: java selenium drop-down-menu


【解决方案1】:

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

最可能的原因是您与错误的元素交互,尝试调试以识别使用的选择器返回的元素。

您可以在调试模式下使用 chrome 开发工具: 1- 在异常行设置断点, 2- 在 chrome 控制台中使用$x("//select[@foo='bar']") 获取元素。

要选择一个值,您可以使用org.openqa.selenium.support.ui.Select 对象:

new Select(element).selectByValue(value);

【讨论】:

  • 您好,感谢您的回答!我尝试使用 Select 对象;但是,我仍然收到错误“元素
  • 是的,可能就是这样。
  • 好的,我会继续调查,我尝试点击各个级别,但希望我错过了一些东西!谢谢 :) 如果这最终有效,我会在这里更新
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2016-11-01
相关资源
最近更新 更多