如何判断Selenium for Java中是否选中了复选框?

如何判断Selenium for Java中是否选中了复选框?,java,selenium,attributes,checkbox,nullpointerexception,Java,Selenium,Attributes,Checkbox,Nullpointerexception,我正在用Java测试webapp中复选框的检查。代码如下: private boolean isChecked; private WebElement e; 我声明e并将其分配到复选框所在的区域 isChecked = e.findElement(By.tagName("input")).getAttribute("checked").equals("true"); 奇怪的是,getAttribute(“checked”)返回nul

我正在用Java测试webapp中复选框的检查。代码如下:

private boolean isChecked;
private WebElement e;
我声明
e
并将其分配到复选框所在的区域

isChecked = e.findElement(By.tagName("input")).getAttribute("checked").equals("true");
奇怪的是,
getAttribute(“checked”)
返回
null
,因此出现
NullPointerException


在复选框的HTML中,没有显示
选中的
属性。然而,不是所有的
输入
元素都有一个
checked=“true”
,所以这个代码应该可以工作吗?

selenium框架的机制:

这里,selenium向its服务器发出请求,并使用标记名输入获取第一个子元素

WebElement e = e.findElement(By.tagName("input"));
然后尝试接收该元素的属性

object attribute = e.getAttribute("checked")
所以要么使用

findElement(By.attribute("checked")
或使用

findElement(By.xpath("\\input[@checked='true']")

另外,我不熟悉java与selenium api的等价物,因此某些方法的名称可能略有不同。

如果您使用的是Webdriver,则会选择您要查找的项目

通常情况下,除非指定,否则复选框的渲染中不会实际应用选中的属性

因此,您在SeleniumWebDriver中要查找的是

isChecked = e.findElement(By.tagName("input")).Selected;
由于WebDriver Java API中没有选择,上述代码应如下所示:

isChecked = e.findElement(By.tagName("input")).isSelected();

您还可以添加一个
语句,以确保选中的是否为真。

我将使用cssSelector执行此操作:

// for all checked checkboxes
driver.findElements(By.cssSelector("input:checked[type='checkbox']"));
// for all notchecked checkboxes
driver.findElements(By.cssSelector("input:not(:checked)[type='checkbox']"));

也许这也有帮助;-)

对于有多个复选框的事件,您只想从中选择/取消选择几个复选框,以下是Chrome驱动程序的工作(IE驱动程序以某种方式失败):

注意:我的复选框没有与之关联的ID,这是根据文档识别它们的最佳方法。注意
在语句开头签名

if(!driver.findElement(By.xpath("//input[@type='checkbox' and @name='<name>']")).isSelected()) 
{
  driver.findElement(By.xpath("//input[@type='checkbox' and @name= '<name>']")).click();
}
if(!driver.findElement(By.xpath(//input[@type='checkbox'和@name='')).isSelected())
{
findElement(By.xpath(//input[@type='checkbox'和@name=''))。单击();
}
  • 声明一个变量
  • 存储单选按钮的选中属性
  • 有一个if条件
  • 让我们假设

    private string isChecked; 
    private webElement e; 
    isChecked =e.findElement(By.tagName("input")).getAttribute("checked");
    if(isChecked=="true")
    {
    
    }
    else 
    {
    
    }
    

    希望这个答案能对你有所帮助。如果您对CSharp Selenium web驱动程序有任何澄清,请告诉我。

    这并不能真正解决问题。我试图确定是否选中了复选框,因此布尔值
    被选中
    。我没有试图找到选中的复选框。不管怎样,我只是使用了一种变通方法,在
    NullPointerException上用
    try
    catch
    环绕
    isSelected
    ,太棒了!我不敢相信我没有在API中看到
    isSelected()
    方法。当它已经存在时,我基本上是在为它编写自己的方法。谢谢。IMHO API中的命名约定实际上并不好——“选择”表示有一个列表可供选择,比如HTML选择标记。复选框是二进制的,是否选中。这不回答问题。这不是如何搜索复选框的问题。问题是是否选中了任何复选框。最好使用
    isSelected()
    方法。然而,您的代码并不能直接回答这个问题。如果您将其更改为与上面文章中的代码相匹配,或者(用英语)解释您建议的更改,那就太好了。element是调用函数时要发送的xpath。返回值将是复选框的状态。
    public boolean getcheckboxvalue(String element)
        {   
            WebElement webElement=driver.findElement(By.xpath(element));
            return webElement.isSelected();
        }
    
    private string isChecked; 
    private webElement e; 
    isChecked =e.findElement(By.tagName("input")).getAttribute("checked");
    if(isChecked=="true")
    {
    
    }
    else 
    {
    
    }
    
    public boolean getcheckboxvalue(String element)
        {   
            WebElement webElement=driver.findElement(By.xpath(element));
            return webElement.isSelected();
        }