我试图通过部分链接文本找到给定的链接WebElement,但我想利用starts-with
使其更加健壮。我试图找到的WebElement是以下列表中的第二个......
<a id="" class="" onmouseout="" href="some.random.href" target="" onmousedown="" onmouseup="" onmouseover="" title="" onclick=""> nsfoobar:80</a>
<a id="" class="" onmouseout="" href="some.other.random.href" target="" onmousedown="" onmouseup="" onmouseover="" title="" onclick=""> sfoobar:443</a>
我认为通过xpath和starts-with
找到它会是一个很好的方法,但它会抛出NoSuchElementException ...
sfoobarXpath = "//a[starts-with(.,' sfoobar:')]";
driver.findElement(By.xpath(sfoobarXpath)).click();
知道我在这里做错了吗?
EDIT1:编辑示例以更好地说明问题
EDIT2:我需要能够在不知道其他WebElement文本的情况下找到此WebElement;在我的实际环境中,可以有任意数量的这些链接元素,并且它们可能会发生变化。
答案 0 :(得分:1)
试试这个xpath表达式:
**//a[normalize-space(substring-before(.,':'))='sfoobar']**
substring-before(.,':')
在冒号字符前检索WebElement的文本内容。
normalize-space()
从WebElement中删除前导空格。
答案 1 :(得分:0)
使用xpath contains()
函数
//a[contains(text(),'sfoobar')]
修改强>
根据OP的编辑
//a[contains(text(),'sfoobar')and not(contains(text(),'nsfoobar'))]
答案 2 :(得分:0)
根据您在问题中提供的HTML以及使用starts-with
的要求,您可以尝试以下xpath:
//a[not(starts-with(text(),' n'))]
注意: - 上面将选择没有innerHTML的链接或以“n”开头的文本(在提供的html中给出'n'之前的空格)
答案 3 :(得分:0)
我最终只是通过部分链接文本查找所有链接元素并迭代该列表,以找到具有完全等于:
的{{1}}之前的子字符串。它不是最优雅的解决方案,但似乎有效......
sfoobar