在一个场景中,我必须选中一个带有文本" 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();
有什么建议吗?
答案 0 :(得分:0)
这个xpath对我有用:
//span[contains(text(), 'ALL') and @class='ui-chkbox-label']/../div/input