gpt4 book ai didi

java - 元素无法滚动到 View 中(即使它就在那里)Selenium

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:59 24 4
gpt4 key购买 nike

我正在使用 Selenium 在具有多个下拉菜单的页面(特别是允许您选择一些选项然后关闭它的弹出页面)上运行测试。我可以完全正常地点击其中一些菜单;然而,其中一些会抛出 ElementNotInteractable 异常,并显示消息“元素无法滚动到 View 中”,即使菜单彼此相邻。我很困惑为什么一个菜单有效而另一个菜单无效,即使它们看起来是相同的。为了单击菜单,我尝试过的三件事是:

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

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

最佳答案

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

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

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

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

new Select(element).selectByValue(value);

关于java - 元素无法滚动到 View 中(即使它就在那里)Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com