selenium webdriver验证是否选中了复选框

时间:2017-07-19 10:58:11

标签: selenium selenium-webdriver checkbox

我需要对正在显示的表执行验证。

daysTableCheck

代码示例我是如何找到复选框元素

   //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>

3 个答案:

答案 0 :(得分:2)

因为您还没有发布代码,我的回答也没有代码:)

  1. 为第二行创建WebElement,即xpath://tbody/tr[2]
  2. 现在遍历此行内的所有tds并检查其子元素。
  3. 如果输入了子元素,则您知道该复选框未被选中。
  4. 关于哪一天,你知道第一天是星期日,第二星期一是等等..

答案 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,可访问性和状态的任何更改。