Selenium - 如何获取复选框的当前状态?

Selenium - How can I get the current state of a checkbox?

我正在使用 Selenium WebDriver,并希望根据 Excel 文件中名为 MovieType 的列的值勾选特定的 HTML 复选框。如果列包含 Yes,则应勾选该复选框;如果包含 No.

,则应取消勾选

HTML 代码如下所示:

<input type="checkbox" onclick="trigger functionA();" tabindex="4" value="vnow" name="movie_Type"/>

如果我的 Excel 文件包含 Yes/No 而不是 vnow,我该如何设置复选框的值? HTML是其他开发者写的,不允许修改。

这是我的 Java Selenium 代码:​​

public static WebElement chkbx_selectMovieType(WebDriver driver, String value) throws Exception{
    try{            
        List<WebElement> chkbxMovieType = driver.findElements(By.name("movie_Type"));
        for(WebElement chkbx : chkbxMovieType){
            if(chkbx.getAttribute("value").equalsIgnoreCase(value))
                chkbx.click();
        }
    }catch (Exception e){
        throw(e);
    }
    return element;
}

欢迎提出任何建议。谢谢。

似乎解决方案是使用 checked 属性 而不是 value 属性,如 here.

所述

checkbox: A check box. You must use the value attribute to define the value submitted by this item. Use the checked attribute to indicate whether this item is selected. You can also use the indeterminate attribute to indicate that the checkbox is in an indeterminate state (on most platforms, this draws a horizontal line across the checkbox).

例如,以下 Java 脚本向页面添加了一个新的复选框并将选中状态记录到浏览器控制台:

"use strict";

var x = document.body.appendChild(document.createElement("input"));
x.setAttribute("type", "checkbox");

console.log(x.checked);

可以找到更多信息 here

因此,您似乎只需要更改 Java 代码中的这一行:

if(chkbx.getAttribute("value").equalsIgnoreCase(value))

编辑:有关使用 Selenium Java API 获取复选框的选中状态的更多信息,请参见 this answer

要了解复选框元素的状态,请使用 .isSelected() 方法。这将 return 一个布尔值,这可以作为是否访问您的 Excel 文档的条件。