2015-01-16 43 views
1

我HTML與此類似:如何編寫更好的xpath表達式?

<tr> 
    <td> 
    <span> 
     <span class = "x28w"></span> 
    </span> 
    <td> 
    <span> 
     <a> 
     <span>3899393</span> 
     </a> 
    </span> 
    </td> 
</tr> 

<tr> 
    <td> 
    <span> 
    </span> 
    <td> 
    <span> 
     <a> 
     <span>3899394</span> 
     </a> 
    </span> 
    </td> 
</tr> 

所以基本上第一跨度爲空,但會顯示一個圖標,如果它下面的子跨度"x28w"類。第二個(即3899393)是一個案例編號。

我想用Java編寫一個硒方法List<String>getCasesWithAlert()

我可以做一個findElements(By.xpath("//tr")),遍歷元素,檢查當前tr是否有td/span/span[contains(@class,'x28w')]

如果存在,則找到該行,找到子元素td,獲取第二個元素並找到元素a/span,然後獲取文本。但是這有點複雜。

是否有某種xpath表達式我可以使用(如下面的兄弟或其他)來查找包含警報圖標(類x28w)在一個表達式中的情況?

回答

0

tr您可以檢查是否第一td符合標準,並從第二td所需span元素:

//tr[td[1][span/span[contains(@class,'x28w')]]]/td[2]/span/a/span 
+0

感謝。這實際上是內部更多的HTML,所以而不是tr它是 // div [包含(@ id,'t1 :: db')或包含(@ id,'t2 :: db')]/table [1]/tbody [1]/tr「,但我認爲我可以推斷出你的路徑,對嗎? – user3257891

+0

@ user3257891是的,這個想法保持不變,我使用了你提供的用於測試的HTML - 爲我工作。你真正的HTML代碼是,如果你在應用該解決方案時遇到困難,謝謝。 – alecxe

+0

如何得到反函數?那些沒有x28w的函數?那麼就沒有第二個x28w了。包含...因爲不會有內部跨度。 – user3257891