如何处理具有相同xpath的多个对象的动态更改xpath

时间:2019-06-12 20:00:14

标签: java selenium-webdriver selenium-chromedriver

我需要选择多个具有相同xpath的对象,只有最后几个值sin xpath更改

我尝试为第一个添加包含,它起作用了。但是我为第二个对象添加了相同的代码,但它不起作用。我们可以用其他任何方法做到这一点吗?

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//[contains(@id,'listbox')]/li")))

此元素适用于第一个元素。第二个xpath在同一页面上也是相似的,只有最后4个字符不同。

两者的实际XPath为//*[@id="listbox1196"]/li

如果我对两个元素使用相同的代码,则第二个失败。请提出建议。

1 个答案:

答案 0 :(得分:0)

您的问题之一是wait。您要的是“位于元素位置的可见性。单数。但是您要给它一个列表。

给定一个列表时,Selenium将始终仅查看第一条记录。因此,一旦第一个元素存在,代码将继续执行,并且很可能导致至少一个中断。

因为要处理列表,所以我在评论中问您是否提前知道应该存在多少个元素。存在一个称为numberOfElementsToBeMoreThan(By locator, int min)的条件。因此第一步就是要等到<li>的大多数或更好的情况出现为止。

现在,由于它是列表,因此您需要遍历该列表。不要以为代码会自动确定您已完成第一条记录,并准备继续进行下一条记录。

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//[contains(@id,'listbox')]/li")));
List<WebElement> things = driver.findElements(By.xpath(".//[contains(@id,'listbox')]/li");

things.get(0).click();
things.get(1).click();
things.get(2).click();

例如...