2015-02-05 98 views
0

這樣的結構被賦予XPath查詢搜索

<div class="user-number">123</div> 
<div class="user-state"> 
<span class="u-state-icon icon icon-1"></span> 
<span> User1</span> 
</div> 

我已經試過這樣的(不正確)的XPath定位由user-numberUser1不明白問題出在哪裏..

xpath=//*[@class='user-number' and text() = '123']/following-sibling::*[contains(@class,'user-state')]/descendant::*[contains(@text,'User1')] 

是什麼調試它的最好方法是什麼? 例如,如果

xpath=//*[@class='user-number' and text() = '123']/following-sibling::*[contains(@class,'user-state')] 

位於一些元素 - 如何打印出其text屬性 - 檢查哪些元素實際上位於?

+0

看起來像我找到答案// * [@ class ='user-number'and text()='123']/following-sibling :: * [contains(@ class,'user-state')]/span [text()='User1']但是最好的調試的方式仍然是個問題)) – Jadwiga 2015-02-05 13:59:15

回答

0

你的XPath表達式,當然,不正確的 - @texttext()(或只是.)來代替:

//*[@class='user-number' and . = '123']/following-sibling::*[contains(@class,'user-state')]/descendant::*[contains(.,'User1')] 

調試XPath表達式通常是使用瀏覽器的開發者工具來完成:在螢火蟲,或內瀏覽器控制檯。例如,在谷歌的鉻控制檯,您可以執行以下命令:

$x("//*[@class='user-number' and . = '123']/following-sibling::*[contains(@class,'user-state')") 

,看看是否有匹配。

或者,您也可以在代碼中進行調試。例如(使用python),找到第一個div元素,並打印出它的文字:

element = driver.find_element_by_xpath("//*[@class='user-number' and . = '123']") 
print(element.text) 
0

薈萃的問題是,如何調試XPath表達式?

那麼,對於像這樣簡單的人來說,最好只是盯着他們,直到你看到問題。檢查名稱的拼寫,檢查名稱空間,檢查空白問題。至少比調試正則表達式更簡單。

對於更復雜的XPath,請嘗試分解它們。刪除一個謂詞,看看是否有所作爲。或者反過來,通過添加條件來建立路徑表達式,在每個階段檢查它仍然找到的東西。

如果您真的非常重視XPath,請考慮架構感知處理:這將使您的XPath表達式與模式匹配,以確保它有意義。

考慮使用可視化XPath處理器進行調試。周圍有數字。我在oXygen中使用XPath處理器(儘管不是真的用於調試XPath,更多用於發現文檔的內容,但這些任務通常需要一起完成。)