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

Posted

技术标签:

【中文标题】Selenium - 如何获取复选框的当前状态?【英文标题】:Selenium - How can I get the current state of a checkbox? 【发布时间】:2015-03-25 19:41:12 【问题描述】:

我正在使用 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 是其他开发人员编写的,所以我不能修改它。

这是我的 Selenium Java 代码:

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;

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

【问题讨论】:

只是为了让我们清楚:如果选中网页上的某个复选框,您是否希望 Selenium 打开本地 Excel 文件(并提取内容)?如果是这样,听起来您实际上在这里处理两个不同的事情:(1)如何使用 Java 读取 Excel 文件(2)如何使用 Selenium 与网页交互。看来您已经完成了第二部分,所以也许您只需要解决 first 部分? 编辑:也许this 或this 会帮助你。 How to read excel data in java, selenium testing? 的可能副本 嗨@GoBusto,我也知道如何做(1)和(2),因为html中的复选框值既不是“y,n,true或false”,我怎么能将其设置为“y、n、true 或 false”,以便在 Excel 文件中用户键入可读值(例如 true),然后如果值 MovieType 的 excel 列为 true,selenium 将选中复选框 好的,我明白了 - 所以问题是 HTML 文件将复选框定义为 &lt;input type="checkbox" value="vnow"&gt;,但您在查询值时希望看到是/否而不是“vnow”。我不确定,但我认为除非更改 HTML 文件,否则无法解决此问题。 编辑:也许this 会有所帮助 - 它说使用checked 而不是value 之前 selenium 可以勾选复选框(如果 html 中的值为 y /true)。现在我的 html 值是“vnow”,我不想在 excel 文件中设置 vnow,所以复选框将被选中。我希望像 y 或 true 这样可读的东西 【参考方案1】:

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

复选框:复选框。您必须使用 value 属性来定义此项目提交的值。 使用checked属性表示是否选中了该项。您也可以使用indeterminate属性表示复选框处于不确定状态(在大多数平台上,这会在复选框上画一条水平线) .

例如,以下 javascript 向页面添加了一个新的复选框,并将选中的情况记录到浏览器控制台:

"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))

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

【讨论】:

if(chkbx.getAttribute("checked").equalsIgnoreCase(value)) 然后在 excel 值中我应该输入什么来指示检查或未检查的操作? 你会这么想的,不是吗?但不完全是 - 根据this question 上的一个 cmets,checked 似乎是一个 property 而不是 attribute,所以 getAttribute() 不会工作。这就是为什么我的 Javascript 示例在将 check-ness 记录到浏览器控制台时使用 x.checked 而不是 x.getAttribute("checked") 我想你误解了我的问题。我想在 excel 中设置 yn,而不是 html。如果excel数据是'y',复选框将被选中。 我认为你需要澄清这个问题,因为老实说我不确定你到底想要做什么。 对不起,我的解释很糟糕。为了使用 Microsoft Excel 对 Selenium 测试进行参数化,在 Excel 的 MovieType 列中,如果用户设置了 y,则 MovieType 复选框将为 checked。如果用户设置n,那么MovieType 复选框将为unchecked。问题是 HTML 文件将复选框定义为 &lt;input type="checkbox" value="vnow"&gt; 我不想在 Excel 中将其设置为 vnow,我希望将其设置为 yn【参考方案2】:

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

【讨论】:

以上是关于Selenium - 如何获取复选框的当前状态?的主要内容,如果未能解决你的问题,请参考以下文章

selenium-java

获取复选框jquery的当前状态[重复]

如何知道是不是使用java在selenium中选中了一个复选框[重复]

如果'checked'属性不可用于使用isChecked / isSelected,如何使用selenium检查复选框的状态? [复制]

Selenium+Java自动化测试的方法

Java Selenium检查复选框标签状态