[英]Difference between sequential and combined predicates
在Selenium中,我編寫了一個xpath
並且兩者都檢索到相同的結果。
//a[@role='tab'][text()=' Assets']
//a[@role='tab' and text()=' Assets']
兩者含義是否相同?
在大多數情況下, a[b][c]
與a[b and c]
具有完全相同的效果。 有兩個例外需要注意:
如果謂詞是數字的,或者依賴於position()
或last()
(我稱這些位置謂詞 ),則它們不是等效的。 例如, a[@x][1]
選擇第a
具有@x
屬性a
元素,而a[1][@x]
選擇第a
具有@x
屬性a
元素(否則不選擇任何內容)。 相比之下, a[1 and @x]
將整數1轉換為布爾值true()
,因此僅表示a[@x]
。
如果對b
或c
評估因動態錯誤而失敗,則行為可能有所不同。 這里的確切規則取決於您所使用的XPath版本,並且老實說規則會給實現留有余地,但是如果要確保在b
為假的情況下不會對c
進行評估,則需要格外小心。 (這在XPath 1.0中幾乎沒有關系,因為很少有表達式會引發動態錯誤。)
第一個是謂詞,這意味着它檢查a[@role='tab']
是否為真,然后繼續進行[text()=' Assets']
第二個是使用and
運算符的正義and
因此它驗證兩個都是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.