从复选框列表中选中一个复选框

时间:2014-05-16 06:05:05

标签: java selenium xpath selenium-webdriver

在一个场景中,我必须选中一个带有文本" 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中,复选框指向&#39; div&#39;元素以上&#39; span&#39;。

目前我正在使用以下正常运行的代码:

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();

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这个xpath对我有用:

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