2016-07-14 150 views
3

我想選擇以下僅頂部國家或只有其他國家如何過濾基於XPATH的元素?

<div> 
    <div> 
    <span class="hb">Top Countries</span> 
    </div> 
    <span>Australia</span> 
    <span>Guinea-Bissau</span> 
    <div> 
    <span class="hb">Other</span> 
    </div> 
    <span>Austria</span> 
    <span>Mauritania</span> 
    <span>Mauritius</span> 
    <span>Nauru</span> 
    <span>Palau</span> 
    <span>Saudi Arabia</span> 
</div> 

我與//*[text()='Top Countries']/../following-sibling::span and not(//*[text()='Other']/../following-sibling::span)

試圖如果我單獨他們的工作都試一下XPATH span元素,但在組合,他們沒有工作。

我想只選擇排名靠前的國家並將它們列入清單['Australia', 'Guinea-Bissau']並篩選出其他國家/地區。

如果我使用//*[text()='Top Countries']/../following-sibling::span所有國家都被選中。即。 ['Australia', 'Guinea-Bissau', 'Spain', 'Switzerland', 'UK', 'USA', 'Austria','Mauritania', 'Mauritius','Nauru','Palau','Saudi Arabia']

隨着//*[text()='Other']/../following-sibling::span項目選擇是['Austria','Mauritania', 'Mauritius','Nauru','Palau','Saudi Arabia']

是動態生成的列表,以便基於文本/國名,我不能選擇它們。

+0

請澄清一下,你在做什麼?如果每個xpath單獨工作,並且只想獲得一個或另一個,那麼只需使用單獨的xpath。 –

+0

@BreaksSoftware增加了說明 – pr4bh4sh

回答

2

是:

//span[preceding-sibling::div[1]/descendant::text()='Top Countries'] 

此選擇:

Element='<span>Australia</span>' 
Element='<span>Guinea-Bissau</span>' 


顯然,只選擇 其他國家

//span[preceding-sibling::div[1]/descendant::text()='Other'] 


看到精彩的 online xpath tester

+0

感謝promt reply,''// span [text()='Top Countries'] /../ following-sibling :: span'''選擇了我想要選擇的所有元素[''澳大利亞','幾內亞比紹'] – pr4bh4sh

+0

@ pr4bh4sh:我看到了,更新了查詢。 – Jan

+1

謝謝@Jan。爲什麼我選擇這個答案或選擇以這種方式獲取元素的解釋很少。這個列表是非常有活力的,在這裏的案例,無論是top還是其他都將出現,兩者都將出現,兩者都不存在。如果我不用Jan的定位器,我會最終嵌套如果其他和列表操作。這些定位器只有兩個檢查,根本沒有任何列表操作。 – pr4bh4sh

0

這有幫助嗎?假設總是有兩個國家頂端國家

//span[text() = 'Top Countries']/../following-sibling::span[1] 
//span[text() = 'Top Countries']/../following-sibling::span[2] 
0

您可以創建兩個列表,所有的元素和一個與不需要的元素

List<WebElement> all = driver.findElements(By.xpath("//*[text()='Top Countries']/../following-sibling::span")); 
List<WebElement> other = driver.findElements(By.xpath("//*[text()='Other']/../following-sibling::span")); 

而不是刪除other國家

all.removeAll(other); 

all現在將只包含「主要國家「