我需要对正在显示的表执行验证。
代码示例我是如何找到复选框元素
的 //navigate t the second tr where the input and img tags are stored
List<WebElement> daysCheckBox = this.driver.findElements(By.xpath(".//*[@id='RULE_KEY']/div/div/div/div/div/center[1]/table[2]/tbody/tr[2]/td"));
System.out.println("Test checkbox");
for(WebElement td : daysCheckBox){
System.out.println(td.getTagName());
}
我遇到的问题是,此表附带2个标签,第一行表示日期,第二个“复选框”,因为您可以看到它们与天数对齐,但复选框没有指向每天的链接。我试图用反向逻辑解决这个问题,试图识别输入标签是否被禁用。但是当选中该框时,它会从输入标签变为img标签,当我识别输入标签时,我也无法确定它取消选择哪一天对应的框。
有没有人有任何建议或建议如何进行此类验证? 谢谢。
我已经让信息源更清楚地显示了上面的图片。
<tbody>
<tr bgcolor="whitesmoke">
<td><b>Sun</b></td>
<td><b>Mon</b></td>
<td><b>Tues</b></td>
<td><b>Wed</b></td>
<td><b>Thurs</b></td>
<td><b>Fri</b></td>
<td><b>Sat</b></td>
</tr>
<tr>
<td><img src="webwb/dhtmlx_iconcheckall.gif" /></td>
<td><input disabled="disabled" type="checkbox" /></td>
<td><input disabled="disabled" type="checkbox" /></td>
<td><input disabled="disabled" type="checkbox" /></td>
<td><img src="webwb/dhtmlx_iconcheckall.gif" /></td>
<td><img src="webwb/dhtmlx_iconcheckall.gif" /></td>
<td><input disabled="disabled" type="checkbox" /></td>
</tr>
</tbody>
答案 0 :(得分:2)
因为您还没有发布代码,我的回答也没有代码:)
//tbody/tr[2]
答案 1 :(得分:2)
您可以创建将您的表格转换为Java Map的方法,例如:
public static Map<String,String> getTableAsMap(WebDriver driver)
{
Map<String,String> checkboxMap = new TreeMap<>();
List<WebElement> header = driver.findElements(By.xpath("((//tbody/tr)[1])/td/*"));
List<WebElement> checkboxes = driver.findElements(By.xpath("((//tbody/tr)[2])/td/*"));
for(int i = 0;i<header.size();i++){
//Only for testing purpose
System.out.printf("KEY: %s, VALUE: %s\n",header.get(i).getText(),checkboxes.get(i).getAttribute("disabled"));
checkboxMap.put(
header.get(i).getText(),
checkboxes.get(i).getAttribute("disabled")
);
}
return checkboxMap;
}
然后在使用驱动程序的主类中:
Webdriver driver = new FirefoxDriver();
Map<String,String> map = getTableAsMap(driver);
System.out.println(map.get("Fri"));
System.out.println(map.get("Sat"));
对于已停用(未选中)复选框您将收到 true ,其中 null 。两者都是String。
答案 2 :(得分:0)
页面对象模型方法可能有效地处理这种情况。因此,您可以在执行一些操作/操作集后刷新页面对象。
由于您提到一旦选中了复选框,标签就会针对该元素进行更改,因此我认为这可能会在页面中基于用户活动多次发生。
我可以建议您实现一个回调,重新加载并设置用户操作的页面对象,例如点击。使用页面对象,您始终可以跟踪所有WebElements,可访问性和状态的任何更改。