Selenium webdriver 如何使用SeleniumWebDriver区分同一页面上具有相同ID的两个元素?

Selenium webdriver 如何使用SeleniumWebDriver区分同一页面上具有相同ID的两个元素?,selenium-webdriver,Selenium Webdriver,我在我的网页上有两个列表,它们都有按钮(图像)从列表中选择所有项目。两个图像具有相同的id,并且没有任何其他信息,如类名、CSS、XPath。我想单击第二个图像,从第二个列表中选择所有项目。但当web驱动程序执行以下行时: driver.findElement(By.id("MoveAllRight")).click(); 它总是单击第一个图像,但我希望它单击第二个图像 有人能帮我吗?它总是单击第一个,因为findElement将返回与您的条件匹配的第一个。您可以使用findElements返

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

driver.findElement(By.id("MoveAllRight")).click();
它总是单击第一个图像,但我希望它单击第二个图像


有人能帮我吗?

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


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

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

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

driver.findElement(By.xpath("(//img[@id='MoveAllRight'])[2]")).click();
它会起作用,但这样做是错误的;
list<webelement>  listele = driver.findelements(by.tageName("Img");
syso(listele.size)

listele.get(0).click;
listele.get(1).click;
syso(列表大小) 获取(0)。单击; 获取(1)。单击;
在过去的3天里,我尝试了各种选项,最后用以下代码解决了问题:

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

listele.get(0).click;
listele.get(1).click;
list listle=driver.findelements(by.tageName(“Img”);
syso(列表大小)
获取(0)。单击;
获取(1)。单击;

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

您的XPath将只选择现有元素中ID的第二个子元素。如果要选择XPath的第二个实例,您应该在XPath周围加上括号。页面上不应该有两个ID相同的元素。…id是一个标识符,因此HTML页面上应该只有一个元素具有该id。当您无法控制站点时,多次使用id是无效的HTML。