2015-03-02 83 views
0

我想查找和比較表格中的標題。然後點擊標題下3行中的刪除按鈕。Selenium Webdriver Xpath:查找並比較元素的文本,然後單擊後面4行的鏈接

例如:假設給定的輸入是標題2.我想要搜索標題2並查看它是否存在,然後單擊與「標題2」關聯的刪除按鈕(如之後的3-4行)。

到目前爲止,這是我接近的代碼。唯一的問題是它總是點擊第一個選擇而不是我想要的地方。

字符串HeadingName = 「標題2」
driver.findElement(By.xpath( 「// TR [含有('」 + HeadingName +「')]/TR [位置()= 4]/TD [2]/DIV/A [2]「))點擊();

這就是表格和代碼的樣子。

標題1
名稱:喬
性別:
選項:更新|刪除
標題2
名稱:Jenny
性別:女性
選項:更新|刪除

<table> 
<tbody> 
    <tr> 
     <th class="st-head-row" colspan="2">Heading 1</th> 
    </tr> 
    <tr class="even"> 
     <td class="st-key">Name:</td> 
     <td class="st-val">Joe</td> 
    </tr> 
    <tr class="even"> 
     <td class="st-key">Gender:</td> 
     <td class="st-val">Male</td> 
    </tr> 
    <tr class="even last-row"> 
     <td class="st-key">Options:</td> 
     <td class="st-val"> 
      <div style="white-space:nowrap;"> 
       <a id="save" href="linkaddress">save</a> 
       | 
       <a id="delete" href="linkaddress">delete</a> 
      </div> 
     </td> 
    </tr> 
    <tr> 
     <th class="st-head-row" colspan="2">Heading 2</th> 
    </tr> 
    <tr class="even"> 
     <td class="st-key">Name:</td> 
     <td class="st-val">Jenny</td> 
    </tr> 
    <tr class="even"> 
     <td class="st-key">Gender:</td> 
     <td class="st-val">female</td> 
    </tr> 
    <tr class="even last-row"> 
     <td class="st-key">Options:</td> 
     <td class="st-val"> 
      <div style="white-space:nowrap;"> 
       <a id="save" href="linkaddress">save</a> 
       | 
       <a id="delete" href="linkaddress">delete</a> 
      </div> 
     </td> 
    </tr> 
</tbody> 
</table> 
+0

請注意,可以有更多或更少的批次行(一個批次是從標題到選項)。一個 – Joe 2015-03-03 00:03:16

回答

0

嘗試下一編碼使用XPath

String headingName = "Heading 2"; 

driver.findElement(By.xpath("//th[text()='"+ headingName +"']/parent::tr/following-sibling::tr[@class='even last-row']/td[@class='st-val']/div/a[@id='delete']")).click(); 

如果一切正常,對於detailedinfo如何XPath是在這裏創造的樣子 - http://www.w3schools.com/xpath/xpath_axes.asp

+0

嗨@Dmitry,不幸的是這個代碼不起作用。我確實看看了你發送的鏈接,並以某種方式瞭解該做什麼。如果你對這個問題有更多的想法,我仍然需要幫助。謝謝。 – Joe 2015-03-02 23:21:19

+0

我錯過了.click();在我的代碼結束。 你可以請分享你使用後得到的錯誤 – Dmitry 2015-03-03 20:34:38

0

試試這個代碼,希望它會幫助你。

driver.findElement(By.xpath("//tr/th[contains(text(),'" + HeadingName + "')]//following::tr[3]/td[2]/div/a[2]")).click(); 

感謝

+0

你好Juhi,不幸的是我已經試過這種方式,它沒有工作。謝謝 – Joe 2015-03-03 16:37:39

+0

你收到了什麼錯誤? – 2015-03-04 10:36:57

0

我想嘗試,並保持XPath的多一點 「語義」,例如

//tr[th = 'Heading 2']/following-sibling::tr[starts-with(td[1], 'Options')][1]//a[. = 'delete'] 

在這裏,我在接下來的「選項」行中的「刪除」鏈接尋找,而不是一般的東西更脆弱,如「下一個,但兩行的第二個環節」。

0

我實際上給出了一個令人驚訝的答案。

dUtil.findElement(By //path(「// tr/th [contains(text(),'」+ headingName +「')] /../ following:tr [3]/td [ 2]/DIV/A [2]「))點擊();

我得到了我想要的每種情況。

  1. 搜索類似於給定輸入標題
  2. 點擊鏈接「刪除」這是3行婁搜索到的元素
  3. 應該工作,即使有不止一個批處理中的行標題(批次含義從標題刪除)
  4. 該批次不必按順序排列。