【问题标题】:How do I distinguish between two elements having same ids on same page using Selenium Webdriver?如何使用 Selenium Webdriver 区分同一页面上具有相同 id 的两个元素?
【发布时间】:2018-11-15 12:12:50
【问题描述】:

我的网页上有两个列表,它们都有按钮(图像)来选择列表中的所有项目。两个图像具有相同的 id,并且没有任何其他信息,例如类名、CSS、XPath。我想单击第二个图像以从第二个列表中选择所有项目。但是当 Web 驱动程序执行以下行时:

driver.findElement(By.id("MoveAllRight")).click();

它总是点击第一张图片,但我希望它点击第二张图片。

有人可以帮我吗?

【问题讨论】:

  • 你不应该在一个页面上有两个具有相同 id 的元素...一个 id 是一个标识符,因此 HTML 页面上应该只有一个具有该 id 的元素。多次使用 id 是无效的 HTML

标签: selenium-webdriver


【解决方案1】:

不要。相反,提出一个错误。这是无效的 HTML。

如果您真的想继续测试无效的东西,并且还想破坏您的自动化测试(您真的不想这样做),您可以执行以下操作:

driver.findElement(By.xpath("(//img[@id='MoveAllRight'])[2]")).click();

它会起作用,但这样做是错误的。

【讨论】:

  • 解决您无法控制网站的情况。
【解决方案2】:

它总是点击第一个,因为 findElement 将返回找到的第一个符合您的条件的。您可以使用 findElements 返回所有匹配元素的列表,然后访问找到的第二个元素。您还可以使用 xpath,例如 //img[@id='MoveAllRight'][2]。

您可能想要做的一件事是调查您是否可以创建一个 xpath 来考虑它应该与之关联的下拉菜单,这样您可以确保您单击的图像始终是该特定下拉菜单的图像.难度取决于您的应用程序。

【讨论】:

  • 您的 XPath 将只选择现有元素中 ID 的第二个子元素。如果您想选择 XPath 的第二个实例,您真的应该在 XPath 周围加上括号。
【解决方案3】:
list<webelement>  listele = driver.findelements(by.tageName("Img");
syso(listele.size)

listele.get(0).click;
listele.get(1).click;

【讨论】:

    【解决方案4】:

    我从过去 3 天开始尝试使用各种选项,最后用这段代码解决了:

    list<webelement>  listele = driver.findelements(by.tageName("Img");
    syso(listele.size)
    
    listele.get(0).click;
    listele.get(1).click;
    

    【讨论】:

      【解决方案5】:

      当我初始化代码时,大小无法解析或不是字段错误消息显示。

      【讨论】:

        猜你喜欢
        • 2016-12-06
        • 1970-01-01
        • 2019-10-15
        • 2019-04-14
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多