用Selenium找到一个内部有非中断空间的链接



我越来越善于查找没有任何id或名称的链接,但这一次我被难住了,谷歌搜索也无济于事。我正在尝试使用Java中的Selenium网络驱动程序点击一个链接。

 <a class="mainleftlinks" onclick="return TrackChanges();" href="/chcfweb/sbc/administration/aac/leftlinks.do?linkid=040000" styleclass="mainleftlinks">&nbsp;&nbsp;Administrative &nbsp;&nbsp;Claiming</a>

不确定那些nbsp是什么。如果您查看应用程序,链接/按钮如下所示:

 Administrative
 Claiming

不知道如何格式化cssSelector,请使用xpath找到它?用别的东西?我被难住了。非常感谢您的帮助!

&nbsp;是一个不可破坏的空间,需要包含它。以下是通过文本获取链接的多种方法:

// by link text with 2 spaces at the begining and 3 spaces in the middle
WebElement ele1 = driver.findElement(By.linkText("  Administrative   Claiming"));
// by xpath with the caracter code of `&nbsp;`
WebElement ele2 = driver.findElement(By.xpath("//a[.='u00A0u00A0Administrative u00A0u00A0Claiming']"));
// by xpath by removing the `&nbsp;`
WebElement ele3 = driver.findElement(By.xpath("//a[translate(.,'u00A0','')='Administrative Claiming']"));

使用xpath包含。也许是类似的东西

driver.findElement(By.xpath("//*[contains(., 'Administrative') and contains(., 'Claiming')]"));

nbsp是一个编码的空白。你在链接中看不到它,因为它会自动转换为"。我不确定我是否理解你的问题,但你可以很容易地通过id或类名获得该字段:

driver.findElement(By.id(yourId));

编辑

或者,你可以通过类名获得:

List<WebElement> elements = driver.findElements(By.className(className));

请注意,这将使您返回该类的所有元素。然后,您可以对它们进行迭代,并检查文本以匹配您的案例。

@PeterBook如果你愿意,你可以使用onclick。尝试

driver.findElement(By.cssSelector("*[onclick='return TrackChanges();']")).click

你需要使用文本吗?

driver.findElement(By.xpath("//*[contains(translate(., 'u00A0', ' '), 'Administrative Claiming')]"));

有关解释,请参阅此处的答案

最新更新