我有以下元素。
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>
标记?
我可以使用id
或name
属性。
答案 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']")
请注意,目标文本中的所有前导和尾随空格都已删除,并且任何内部空白都将更改为单个空格字符。