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