2016-09-28 93 views
0

所以我在那裏的某些元素的ID是與某些部分發生變化,某些部分是恆定的,像這樣動態生成的網頁:硒檢查,如果屬性包含在Java中的字符串的一部分

<div id= "xxxdiv" title= 'this title'> 
    <p id = "xxxp"> 
    <table id = "xxxtable" title = 'not derp'> 
     <div id = "yyyydiv"> 
      <table id = "yyytable" title= 'derp'> 
      <table id = "yyytable2" title = 'not derp'> 
       <table id = "zzztable" title = derp> 

我試圖在頁面上進行一些動態查找,以查找ID包含已知值的給定元素。例如,我並不總是知道可能存在多少嵌套元素,因此在最後生成的數字可能會有所不同。所以我想通過xpath找到一個元素,@title = not derp,@id包含yyy。我怎樣才能做到這一點?

+0

你想只有表或任何元素符合你的條件? – testerjoe2

回答

2
driver.findElement(By.xpath("//table[@title='not derp' and contains(@id, 'yyy')]")); 

會找到符合你的搜索條件這將是你的HTML代碼段<table id = "yyytable2" title = 'not derp'>的第一要素。

+0

從技術上講,這找到了第一個「TABLE」元素......不僅僅是第一個元素。取決於OP想要的內容。它可以很容易地切換到'「// * [@ title ...」'以使其通用。 – JeffC

+0

@JeffC真的,我編輯了答案以澄清。 –

+0

謝謝。這是非常有用的 – Jrawr

1

您可以使用大量的關係和邏輯運算符。在這種情況下,假設你要查找的表元素,你可以使用://table[@title='not derp' and contains(@id,'yyyy')]

1

我想通過XPath查找一個元素,其中@title =不DERP和@id包含YYY

我建議你cssSelector代替,因爲使用By.cssSelector()找到一個元素是多少在性能上比By.xpath()快。所以你應該嘗試如下: -

driver.findElement(By.cssSelector("table[id *= 'yyy'][title = 'not derp']")); 
相關問題