我试图从自动建议字段中选择一个元素,但是我总是收到一条错误消息,即使我确定我的xpath正确,也找不到该元素
这是我的代码:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class=\"ui-menu-item-with-icon ui-menu-item\"][1]")));
driver.findElement(By.xpath("//*[@class=\"ui-menu-item-with-icon ui-menu-item\"][1]")).click();
它应该找到// * {@class=\"ui-menu-item-with-icon ui-menu-item\",这是阿尔伯特·卡缪斯的第一个建议
这是externalHtml
<li class="ui-menu-item-with-icon ui-menu-item" role="menuitem">
<a class="ui-corner-all" tabindex="-1">
<span class="item-icon"></span>
Albert Camus (SARCELLES)</a>
</li>"
答案 0 :(得分:1)
除了使用通配符(可能导致处理时间更长)外,您的XPath差不多可以,因此您可以使用li
而不是*
。
另一种选择是坚持使用<a>
tag单击containing the text normalize-space() function,例如:
//a[normalize-space()="Albert Camus (SARCELLES)"]
您的弹出窗口也可能位于iframe内,因此您可能必须switch the webdriver context到相关的iframe元素。
答案 1 :(得分:0)
为什么不通过Xpath尝试linkText?
linkText比Xpath更稳定,这是毫无疑问的。
代码:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Albert Camus (SARCELLES)")));
我不太确定HTML中的空格,这就是为什么我使用 partialLinkText
的原因