如何在XPath text()函数中匹配br标记

时间:2015-02-23 02:57:05

标签: ruby xpath

我有以下元素。

driver = Selenium::WebDriver.for :phantomjs
driver.xpath("/html/body/form/table/tbody/tr[14]/td/table/tbody/tr/td/table/tbody/tr[1]/td[1]/font").text
=> "unique\ntext"

但我不想依赖不稳定的表格布局,所以我决定在xpath中使用text()函数,如:

driver.xpath("//font[text()='unique\ntext']")
=> nil

但是如您所见,我无法通过text()函数找到该元素。原始文本为unique<br>text

如何使用XPath匹配<br>标记?

我可以使用idname属性。

1 个答案:

答案 0 :(得分:1)

text()测试选择任何文本节点。在此示例中,<br>之前和之后有两个此类节点。它与text方法或父节点的字符串值不同。

选择你想要的东西的方法可能是这样的:

driver.xpath("//font[ . ='unique\ntext']")

您可能需要在文本之前或之后添加额外的换行符。请注意,这依赖于Ruby在将查询传递给XPath处理器之前将\n转换为实际的换行符,因此您需要注意正确获取引号。这比较了节点的 string-value ,对于element is the concatenation of all the descendent text nodes,这是你想要的。

更好的解决方案可能是在这里使用normalize-space() function(只要文本的唯一方面不依赖于换行符)。

尝试:

driver.xpath("//font[normalize-space()='unique text']")

请注意,目标文本中的所有前导和尾随空格都已删除,并且任何内部空白都将更改为单个空格字符。

相关问题