2014-05-15 59 views
2

在我們的應用程序中,我有一個場景來點擊特定用戶的編輯圖標。 所以目前我使用下面的代碼:點擊webTable中特定記錄的特定按鈕

下面是編輯按鈕的HTML源代碼:

<tbody id="defaultOverviewTable_data" class="ui-datatable-data ui-widget-content"> 
    <tr class="ui-widget-content ui-datatable-even ui-datatable-selectable" aria-selected="false" role="row" data-rk="5910" data-ri="0"> 
    <tr class="ui-widget-content ui-datatable-odd ui-datatable-selectable" aria-selected="false" role="row" data-rk="1" data-ri="1"> 
    <tr class="ui-widget-content ui-datatable-even ui-datatable-selectable" aria-selected="false" role="row" data-rk="1211" data-ri="2"> 
    <tr class="ui-widget-content ui-datatable-odd ui-datatable-selectable ui-state-hover" aria-selected="false" role="row" data-rk="14" data-ri="3"> 
     <td class="ui-selection-column" style="width:17px;min-width:17px;max-width:17px;" role="gridcell"> 
     <td role="gridcell">HemaSundar</td> 
     <td style="width:105px;min-width:105px;max-width:105px;" role="gridcell">52A-4EB-52C-294</td> 
     <td role="gridcell">HemaSundar</td> 
     <td role="gridcell">HemaSundar</td> 
     <td role="gridcell">Banking, Admin, System, EuropeanGate, SAP, MBS, Audit, Confidential Payments, iPhone App</td> 
     <td role="gridcell"> 
     <td class="fillerColumn" style="width:0px;min-width:0px;max-width:0px;" role="gridcell"/> 
     <td class="iconColumn width_components_4" style="width:160px;min-width:160px;max-width:160px;" role="gridcell"> 
      <div class="columnDiv"> 
       <div id="defaultOverviewTable:3:j_id128" class="ui-outputpanel ui-widget"> 
        <button id="defaultOverviewTable:3:j_id129" class="ewms-ui-icon-superEdit ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-state-hover" type="submit" title="" alt="Edit" onclick="return false;PrimeFaces.addSubmitParam('defaultOverviewForm',{'edit_id':'14'})" name="defaultOverviewTable:3:j_id129" role="button" aria-disabled="false"> 
         <span class="ui-button-text ui-c">ui-button</span> 
        </button> 
       </div> 

這是我現在使用的代碼:

WebElement overview = driver.findElement(By.id("defaultOverviewTable_data"));// considering the complete webtable 
     List<WebElement> individualRows = overview.findElements(By.tagName("tr"));//considering invidual user 
     for (WebElement wb: individualRows) 
     { 
      List<WebElement> indWb = wb.findElements(By.tagName("td"));// considering individual columns for individual users 
      System.out.println(indWb.get(1).getText()); 
      if (indWb.get(1).getText().equalsIgnoreCase(username))// if the username equals the expected 
      { 
       List<WebElement> allButtons = wb.findElements(By.tagName("button"));// getting all the buttons of that user 
       for (WebElement edit: allButtons) 
       { 
        System.out.println(edit.getAttribute("title")); 
        if (edit.getAttribute("title").matches("Edit")) 
        { 
         edit.click();// clicking on button where title is Edit. 
         break; 
        } 
       } 
       break; 
      } 
     } 

有些時候,在表中有超過300個用戶,那麼如果我想單擊編輯一個用戶在200位置近似。這需要更多的時間。

是否有任何其他方式通過使用XPATH單擊編輯按鈕,其中用戶名列等於一個特定的名稱?

注意:按鈕的ID不是恆定的。

+0

在HTML中放置用戶名和特定名稱? – olyv

+0

在HTML中,「用戶名」是「HemaSundar」 需要單擊「HemaSundar」用戶 – HemaSundar

+0

和特定名稱的編輯圖標(最後3行)? – olyv

回答

0

我相信這個XPath應該完成你想要達到的目標。

//tbody[@id='defaultOverviewTable_data']/tr[./td[2][text()='HemaSundar']]//button[@alt='Edit'] 

注:

  • TD [2]的使用,因爲基於XPath的是1,而你正在尋找在 第二列

  • 你提到單擊按鈕,其中title="Edit"但你的代碼片段實際上沒有,所以我選擇alt屬性而不是

的XPath可以非常強大,讓我知道,如果你想在深入的解釋更

編輯:添加下面的XPath更好的解釋...

//tbody[@id='defaultOverviewTable_data'] 

此找到tbody元素與id ='defaultOverviewTable_data',在頁面的任何地方。簡單

/tr[./td[2][text()='HemaSundar']] 

這找到一個tr元素是tbody的直接子(只有一個/開頭)。方括號部分表示只能找到與方括號(./td[2][text()='HemaSundar'])內的條件匹配的行,或者使用英語,它將只查找在第二個子節點td中具有文本「HemaSundar」的行。

//button[@alt='Edit'] 

最後,會發現(因爲雙//的不只是眼前的孩子)以下TR任何按鈕,有「標題」的alt屬性。如果您願意,您可以切換@alt部分以匹配任何其他屬性。

不要忘記標記此答案爲正確的,如果它解決了您的問題:)

+0

非常感謝。這工作非常好。但我完全不瞭解XPATH。你能不能更詳細地告訴我一點。或者你可以建議我任何高級XPATH教程。我有基本的XPATH知識。 – HemaSundar

+0

很高興能幫助:)更新了答案並提供了更好的解釋 –