2015-02-23 161 views
1

我有一個以下元素。如何匹配XPath文本中的br標籤()函數

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" 

但我不想依靠不穩定的桌面佈局,所以我決定用text()功能類似的XPath:

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

但是正如你看到的,我找不到元素由text()功能。原文爲unique<br>text

如何使用XPath匹配<br>標籤?

沒有idname屬性,我可以使用。

+1

我不認爲你可以。 '
'是一個節點,不是文本元素的內容。 – jrochkind 2015-02-23 03:02:15

回答

1

text()測試選擇任何文本節點。在這個例子中有兩個這樣的節點,在<br>之前和之後。它與text方法或父節點的字符串值不一樣。選擇你想可能是這樣什麼

方式一:

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

您可能需要之前或之後文本添加額外的換行符。請注意,這依賴於Ruby在將查詢傳遞給XPath處理器之前將\n轉換爲實際的換行符,因此您需要注意確保報價正確。這比較節點的字符串值,對於element is the concatenation of all the descendent text nodes,這是您想要的。

更好的解決方案可能是在這裏使用normalize-space() function(只要文本的獨特方面不依賴於換行符)。

嘗試:

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

注意的是,在目標文本中的所有前導和尾隨空白已被刪除,任何內部空白更改爲一個空格字符。

+0

我不知道'normalize-space()'函數。謝謝! – ironsand 2015-02-23 03:48:59