簡體   English   中英

簡潔的 xpath 查詢無法使用 Selenium Python

[英]Concise xpath query doesn't work using Selenium Python

第一個 xpath 查詢有效,但第二個無效:

第一組:

FieldElementParent_obj = Driver.find_element(by=By.XPATH, value="//div[contains(text(), '%s')]/following-sibling::div" % FieldTitle)
FieldElement_obj = FieldElementParent_obj.find_element(by=By.XPATH, value=".//div[contains(text(), '"+FieldData+"')]")

第二套:

FieldElementTitle_obj = Driver.find_element(by=By.XPATH, value="//div[contains(text(), '%s')]" % FieldTitle)
FieldElement_obj = FieldElementTitle_obj.find_element(by=By.XPATH, value="./following-sibling/descendant::div[contains(text(), '"+FieldData+"')]")

為什么不?

在第二個塊的第二行中, xpath缺少參考節點,您可以將其稱為self如下:

FieldElementTitle_obj = Driver.find_element(by=By.XPATH, value="//div[contains(text(), '%s')]" % FieldTitle)
FieldElement_obj = FieldElementTitle_obj.find_element(by=By.XPATH, value=".//self::following-sibling/descendant::div[contains(text(), '"+FieldData+"')]")

精簡版:

兩組中的定位器不同(詳細比較請參見長版本),這就是為什么它們的作用可能不同。 在很大程度上取決於您使用它們的 DOM 的結構。

長版:

在您的兩個“集合”中,您將定位器分成兩部分並分別搜索它們。 如果您將每個定位器組合成一個定位器,然后進行比較,您可以看到差異。 注意:我轉過身來

//div[contains(text(), '%s')] % FieldTitle

進入

//div[contains(text(), '"+FieldTitle+"')]

為了便於比較,但它們的工作原理相同。

第一組:

//div[contains(text(), '"+FieldTitle+"')]/following-sibling::div//div[contains(text(), '"+FieldData+"')]

第二套:

//div[contains(text(), '"+FieldTitle+"')]/following-sibling/descendant::div[contains(text(), '"+FieldData+"')]

在第二組中,您沒有指定following-sibling應該是什么元素類型(例如 DIV),因此您將獲得第一個兄弟的任何內容......它可能是 DIV,它可能不是,但它取決於DOM 的結構。

下一個區別是//div/descendant::div 除非當前節點是 DIV,否則它們的作用相同......所以,它再次取決於您的 DOM。 從規范:

// 是 /descendant-or-self::node() 的縮寫

有關更多信息,請參閱規范

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM