2014-05-16 305 views
0

在一種情況下,我必須選擇一個帶有文本「ALL」的複選框。 下面是示例HTML代碼:從複選框列表中選擇一個複選框

<tbody id="modulePermissionDatagridId_data" class="ui-datatable-data ui-widget-content"> 
    <tr class="ui-widget-content ui-datatable-even" role="row" data-ri="0"> 
    <tr class="ui-widget-content ui-datatable-odd" role="row" data-ri="1"> 
     <td role="gridcell"> 
      <div id="modulePermissionDatagridId:1:j_idt124" class="ui-chkbox ui-widget multipleSelectionChkBox"> 
       <div class="ui-helper-hidden-accessible"> 
        <input id="modulePermissionDatagridId:1:j_idt124_input" type="checkbox" onchange="handleChkBoxValueChange(this)" name="modulePermissionDatagridId:1:j_idt124_input"/> 
       </div> 
       **<div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default">** 
        <span class="ui-chkbox-icon ui-c"/> 
       </div> 
       <span class="ui-chkbox-label">ALL</span> 
      </div> 
     </td> 
    </tr> 

注:在上面的HTML,複選框被指向上面的「跨度」的「格」的元素。

目前我使用下面的代碼是工作的罰款:

WebElement perm = driver.findElement(By.id("modulePermissionDatagridId_data")); 
List<WebElement> permno = perm.findElements(By.tagName("tr")); 

int i=0; 
for(WebElement wb : permno) 
{ 
    String permName = wb.getText(); 
    System.out.println(permName); 
    //for (int i=0; i< permno.size(); i++) 
    //{ 
    System.out.println(i); 
    if (permName.equals("ALL")) 
    { 
     System.out.println(permName); 
     System.out.println(i); 
     driver.findElement(By.xpath("//*[@id='modulePermissionDatagridId:"+i+":j_idt124']/div[2]")).click(); 
     //break; 
    } 
    //} 
    i++; 
} 

,但我想簡化該代碼。所以我嘗試了以下XPATH這是行不通的:

driver.findElement(By.xpath("//tbody[@id='modulePermissionDatagridId_data']/tr[./td/div[span='ALL']]/div")).click(); 

有什麼建議嗎?

回答

0

此XPath爲我工作:

//span[contains(text(), 'ALL') and @class='ui-chkbox-label']/../div/input 
相關問題