Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
selenium webdriver验证是否选中复选框_Selenium_Selenium Webdriver_Checkbox - Fatal编程技术网

selenium webdriver验证是否选中复选框

selenium webdriver验证是否选中复选框,selenium,selenium-webdriver,checkbox,Selenium,Selenium Webdriver,Checkbox,我需要对这样显示的表执行验证 代码示例我如何尝试查找checkbox元素 //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

我需要对这样显示的表执行验证

代码示例我如何尝试查找checkbox元素

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

    }
//导航到存储输入和img标记的第二个tr
List daysCheckBox=this.driver.findElements(By.xpath(“./*[@id='RULE_KEY']]/div/div/div/div/center[1]/table[2]/tbody/tr[2]/td”);
System.out.println(“测试复选框”);
for(WebElement td:daysCheckBox){
System.out.println(td.getTagName());
}
我遇到的问题是,这个表有两个标记,第一行代表天,第二个“复选框”与天对齐,但是复选框没有指向每天的链接。我尝试用反向逻辑来解决这个问题,如果输入标记被禁用,则尝试识别它。但是,当选择框时,它会从输入标记变为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>

太阳
周一
周二
结婚
星期四
星期五
坐

由于您没有发布代码,我的答案也没有代码:)

  • 为第二行创建WebElement,即xpath:
    //tbody/tr[2]
  • 现在遍历此行中的所有tds并检查它们的子元素
  • 如果输入了子元素,则知道复选框未选中,否则将选中
  • 关于哪一天,你知道第一天是星期天,第二天是星期一,依此类推

  • 由于您没有发布代码,我的答案也没有代码:)

  • 为第二行创建WebElement,即xpath:
    //tbody/tr[2]
  • 现在遍历此行中的所有tds并检查它们的子元素
  • 如果输入了子元素,则知道复选框未选中,否则将选中
  • 关于哪一天,你知道第一天是星期天,第二天是星期一,依此类推

  • 您可以创建将表转换为Java映射的方法,例如:

    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;
    }
    
    publicstaticmap getTableAsMap(WebDriver)
    {
    Map checkboxMap=newtreemap();
    列表头=driver.findElements(By.xpath(((//tbody/tr)[1])/td/*”);
    列表复选框=driver.findElements(By.xpath(((//tbody/tr)[2])/td/*”);
    
    对于(int i=0;i,您可以创建将表转换为Java映射的方法,例如:

    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;
    }
    
    publicstaticmap getTableAsMap(WebDriver)
    {
    Map checkboxMap=newtreemap();
    列表头=driver.findElements(By.xpath(((//tbody/tr)[1])/td/*”);
    列表复选框=driver.findElements(By.xpath(((//tbody/tr)[2])/td/*”);
    
    对于(int i=0;i页面对象模型方法可能有效地处理这种情况。因此,您可以在某些操作/操作集之后刷新页面对象

    因为您提到,一旦选中复选框,元素的标记就会更改,所以我假设这可能会在页面中根据用户活动发生多次


    我建议您实现一个回调,重新加载并在用户操作(如单击)上设置页面对象。使用页面对象,您始终可以跟踪所有Web元素、可访问性和状态的任何更改。

    页面对象模型方法可以有效地处理此情况。因此,您可以在一些动作/一组动作

    因为您提到,一旦选中复选框,元素的标记就会更改,所以我假设这可能会在页面中根据用户活动发生多次


    我建议您实现一个回调,重新加载,并在用户操作上设置页面对象,如单击。使用页面对象,您始终可以跟踪所有Web元素、可访问性和状态的任何更改。

    感谢您的快速回答,我将尝试这样做,并发布反馈结果以及我包含的示例代码代码示例我如何识别元素,但我不太确定如何检查复选框。当我执行td.getTagName()时,我会得到td标记(其中7个)。您现在知道获取输入标记的方法了吗?谢谢您的快速回答。我将尝试这样做,并发布反馈结果以及示例代码。我包括了代码示例我如何识别元素,但我不太确定如何检查复选框。当我执行td.getTagName()时,我会获取td标记(其中7个)。你现在知道获取输入标记的方法了吗?谢谢。这就是我实际上要做的。我唯一缺少的部分是getAttribute(“禁用”),谢谢你花时间编写代码。这解决了复选框的这个讨厌的实现。这就是我实际上要做的。我唯一缺少的部分是getAttribute(“disabled”)感谢您抽出时间编写代码,这解决了复选框的这个烦人的实现。