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 文件将复选框定义为<input type="checkbox" value="vnow">
,但您在查询值时希望看到是/否而不是“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 中设置 y
或 n
,而不是 html。如果excel数据是'y',复选框将被选中。
我认为你需要澄清这个问题,因为老实说我不确定你到底想要做什么。
对不起,我的解释很糟糕。为了使用 Microsoft Excel 对 Selenium 测试进行参数化,在 Excel 的 MovieType
列中,如果用户设置了 y
,则 MovieType 复选框将为 checked
。如果用户设置n
,那么MovieType 复选框将为unchecked
。问题是 HTML 文件将复选框定义为 <input type="checkbox" value="vnow">
我不想在 Excel 中将其设置为 vnow
,我希望将其设置为 y
或 n
【参考方案2】:
要知道复选框元素的状态,请使用.isSelected()
方法。这将返回一个布尔值,这可以作为是否访问您的 Excel 文档的条件。
【讨论】:
以上是关于Selenium - 如何获取复选框的当前状态?的主要内容,如果未能解决你的问题,请参考以下文章
如何知道是不是使用java在selenium中选中了一个复选框[重复]
如果'checked'属性不可用于使用isChecked / isSelected,如何使用selenium检查复选框的状态? [复制]