如何使用Selenium检查复选框状态?

时间:2018-02-19 08:32:17

标签: c# selenium selenium-webdriver checkbox

如何验证是否使用Selenium选中或取消选中复选框? 因为方法“ element.Selected ”在这种情况下不起作用。

如果选中复选框,则为html代码:

<td class="dxgvCommandColumn_MetropolisBlue dxgv" onclick="aspxGVScheduleCommand('messageGrid',['Select',1],1)" align="center">
<span id="messageGrid_DXSelBtn1_D" class="dxICheckBox_MetropolisBlue dxichSys dxWeb_edtCheckBoxChecked_MetropolisBlue">
<input id="messageGrid_DXSelBtn1" value="U" readonly="readonly" style="border-width:0;width:0;height:0;padding:0;margin:0;position:relative;background-color:transparent;display:block;" type="text"/>
</span>
</td>

如果未选中复选框,则为html代码:

<td class="dxgvCommandColumn_MetropolisBlue dxgv" onclick="aspxGVScheduleCommand('messageGrid',['Select',1],1)" align="center">
<span id="messageGrid_DXSelBtn1_D" class="dxWeb_edtCheckBoxUnchecked_MetropolisBlue dxICheckBox_MetropolisBlue dxichSys">
<input id="messageGrid_DXSelBtn1" value="U" readonly="readonly" style="border-width:0;width:0;height:0;padding:0;margin:0;position:relative;background-color:transparent;display:block;" type="text"/>
</span>
</td>

图像: checkboxes

2 个答案:

答案 0 :(得分:2)

根据 HTML ,您已经分享了 Checkbox outerHTML <span>标记,其中包含以下内容: class 属性:

  • 经过

    <span id="messageGrid_DXSelBtn1_D" class="dxICheckBox_MetropolisBlue dxichSys dxWeb_edtCheckBoxChecked_MetropolisBlue">
        <input id="messageGrid_DXSelBtn1" value="U" readonly="readonly" style="border-width:0;width:0;height:0;padding:0;margin:0;position:relative;background-color:transparent;display:block;" type="text"/>
    </span>
    
  • 未检查

    <span id="messageGrid_DXSelBtn1_D" class="dxWeb_edtCheckBoxUnchecked_MetropolisBlue dxICheckBox_MetropolisBlue dxichSys">
        <input id="messageGrid_DXSelBtn1" value="U" readonly="readonly" style="border-width:0;width:0;height:0;padding:0;margin:0;position:relative;background-color:transparent;display:block;" type="text"/>
    </span>
    

因此,要检查复选框选中还是取消选中,您可以进行以下验证:

if(driver.FindElement(By.XPath("//input[@id='messageGrid_DXSelBtn1']//preceding::span[1]")).GetAttribute("class").contains("dxWeb_edtCheckBoxChecked_MetropolisBlue"))
    Console.WriteLine("Check Box is Checked");
else 
    Console.WriteLine("Check Box is UnChecked");

答案 1 :(得分:1)

“element.Selected”无效,因为页面上根本没有复选框元素。 Selenium不知道输入“看起来”像复选框。它只是HTML.input类型:“text”。 你唯一的机会是获得JS执行器并自己检查属性(elm是你的Selenium“输入”对象得到的XPATH或CSS选择器): 设定价值:

ExecuteScript("arguments[0].setAttribute(arguments[1], arguments[2]);",
                                    new object[] {elm, "value", value });

获得价值:

ExecuteScriptReturn("return arguments[0].getAttribute(arguments[1]);",
                                        new object[] {elm, "value" });

方法是:

private void ExecuteScript(string script, object[] arguments)
        {
            var jsExecutor = (IJavaScriptExecutor)_browser;
            jsExecutor.ExecuteScript(script, arguments);
        }
private void ExecuteScriptReturn(string script, object[] arguments)
        {
            var jsExecutor = (IJavaScriptExecutor)_browser;
            return (string)jsExecutor.ExecuteScript(script, arguments);
        }

编辑: 请注意,在这种情况下,您实际上并未检查输入值,而是检查这两个元素的类值:

span id="messageGrid_DXSelBtn1_D" class="dxICheckBox_MetropolisBlue dxichSys dxWeb_edtCheckBox**Checked**_MetropolisBlue"

span id="messageGrid_DXSelBtn1_D" class="dxWeb_edtCheckBox**Unchecked**_MetropolisBlue dxICheckBox_MetropolisBlue dxichSys"