>我需要选择具有相同 xpath 的多个对象,只有最后几个值 xpath 更改
我尝试为第一个添加包含,它有效.但是我正在为第二个对象添加相同的代码,但它不起作用.我们可以用任何其他方法做到这一点吗?
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//[contains(@id,'listbox')]/li")))
这是为第一个元素工作。第二个 xpath 也在同一页面上相似,只有最后 4 个字符不同。
两者的实际 XPath 是//*[@id="listbox1196"]/li
如果我对两个元素使用相同的代码,第二个失败。请建议 .
您的问题之一出在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();
例如...