2015-12-14 62 views
2

我有兩個XPath選擇的是找到完全一樣的元素,但我不知道哪一個是從代碼執行速度,視角等Xpath的選擇差異:利弊

第一個XPath可讀性好點:

//*[@id="some_id"]/table/tbody/tr[td[contains(., "Stuff_01")]]//ancestor-or-self::td/input[@value="Stuff_02"] 

第二個XPath:

//tr[td[@title="Stuff_01"]]//ancestor-or-self::td/input[@value="Stuff_02"] 

的參數例如,如果頁面的代碼將被改變,例如一些"tbody"將被移動,第一個將不起作用,這是真的嗎? 那麼,哪種方式的代碼更好,爲什麼?

我希望能有詳細的答案,因爲這對工作流程至關重要。

+0

也許這個答案對我的老問題會有所幫助! http://stackoverflow.com/questions/34092985/find-elements-by-data-attributes – fabersky

+0

部分它確實,thx,但不是全部...... – Newcomer

+0

我將它添加爲幫助其他用戶的答案 – fabersky

回答

2

這可能既不是XPath是理想的。看到目標HTML和選擇目標的描述將需要決定或提供另一種選擇。

此外,與所有表現事項一樣,首先進行測量。

也就是說,性能不太可能成爲問題,特別是如果您在進一步限制選擇空間之前使用@id或其他錨點來磨合縮減的子樹。

例如,如果只有一個elem1234文檔中,id使用//elem[@id="1234"]/rest-of-xpath,你已經消除了文件的性能/可讀性/魯棒性關注的其餘部分。只要elem以下的子樹相對溫和(通常情況下會是這樣),那麼關於這些問題你會沒事的。

此外,是的,table//td是一個很好的方式來抽象是否存在tbody