通过以

时间:2015-06-18 16:35:04

标签: java selenium selenium-webdriver

我试图通过部分链接文本找到给定的链接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;在我的实际环境中,可以有任意数量的这些链接元素,并且它们可能会发生变化。

4 个答案:

答案 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