我正在阅读Alan Richardson的Selenium Simplified书,并通过将练习/测试从Selenium RC转换为Webdriver,来使用JUnit学习Webdriver。到目前为止,这已被证明是一种极好的学习体验。但是最近我遇到了一个问题,尽管进行了广泛搜索,却无法解决。

Selenium RC中有一个selenium.check命令,该命令将检查一个框是否为空,或保留为已选中状态。例如:

selenium.check("//input[@name=’checkboxes[]’ and @value=’cb3’]");


如果您访问目标网站(http://compendiumdev.co.uk/selenium/basic_html_form.html),则会看到三个复选框,其中之一被选中。我已经写了一些伪代码,但是无法使其正常工作。这是伪代码:

isChecked = driver.findElement(By.xpath("//input[@type='checkbox']"));

if (isChecked = false) {
    check the box;
} else {
    do nothing;
}


我知道布尔值isSelected()应该具有功能,但我不知道该怎么做。我所有的研究都返回了部分解决方案,但是没有什么可以让我对解决方案产生信心的飞跃了。

评论

我对这个问题到底是什么感到困惑。您是否无法切换该复选框,还是无法验证该复选框是否已选中?另外,如果您还没有看过,该文档可能会对您有所帮助-jarvana.com/jarvana/view/org/seleniumhq/selenium/…

@SheyMouse,如果您在报告错误时记下尝试的代码,预期结果和实际结果,它可能会帮助其他人提供帮助;-)

@SuchitParikh感谢您的链接。我正在学习阅读文档,但是知识的应用仍然有点生锈。

@dzieciou谢谢您的建议。我一直在尝试做您提到的事情,但是没有取得进展。我在调试代码方面变得更好,但这是我无法解决的问题。

#1 楼

在Selenium Simplified课程中,选择器的秘密实际上是“值”而不是“类型”,因为“值”在页面上唯一地标识了WebElement,并带有“以防万一”类型>
WebElement checkBox1;
WebElement checkBox3;

checkBox1 = driver.findElement(By.cssSelector("input[value='cb1']"));
checkBox3 = driver.findElement(By.cssSelector("input[value='cb3']"));

if(!checkBox1.isSelected()){
    checkBox1.click();
}

//checkBox3 is selected by default
if(checkBox3.isSelected()){
    checkBox3.click();
}



或使用findElements代码。

您可以改为:

List<WebElement> selectElements= 
driver.findElements(By.cssSelector("input[name='checkboxes[]']"));

selectElements.get(0).click();

if( selectElements.get(2).isSelected()){
    selectElements.get(2).click();
}


或对其进行迭代: />希望有帮助。

#2 楼

它应该像这样简单:

IWebElement element = driver.findElement(By.xpath("//input[@type='checkbox']"));
if (!element.Selected)
{
    element.Click();
}


评论


谢谢你的例子。两件事情。首先,IWebElement和WebElement之间有什么区别?其次,这似乎只选中了三个框中的第一个,而未选中第二个框。那是对的吗?我的感觉是应该拿起所有未选中的框并选中它们。任何进一步的指针将不胜感激。

–SheyMouse
2012年12月13日上午10:47

如果您使用的是.net网络驱动程序,则为IWebElement。啊,我没有意识到您要检查所有3个复选框。在这种情况下,您可以执行driver.findElements而不是driver.findElement,然后将上面的代码放在foreach中以遍历每个复选框。

–山姆·伍兹(Sam Woods)
2012年12月13日在21:26

#3 楼

在C#中非常简单

示例:

IWebElement chkBox = driver.FindElement(By.Id("some id "));
if (chkBox.Selected) {
  //perform actions 
} else {
  //perform actions
}


评论


不确定这与Sam的答案有何不同。

– Suchit Parikh
13年5月3日在18:17

#4 楼

这是工作代码的示例-通过男性和女性单选按钮选择性别。

/* load that webelement list of radio buttons. then follow the below code & logic */
List<WebElement> rdBtn_Sex = driver.findElements(By.name("sex"));

// Create a boolean variable which will hold the value (True/False)
boolean bValue = false;

// This statement will return True, in case of first Radio button is selected
bValue = rdBtn_Sex.get(0).isSelected();

// This will check that if the bValue is True means if the first radio button is selected
if (bValue = true) {
     // This will select Second radio button, if the first radio button is selected by default
    rdBtn_Sex.get(1).click();
} else {
     // If the first radio button is not selected by default, the first will be selected
     rdBtn_Sex.get(0)).click();
}


#5 楼

Boolean checkedStatus = true;
checkedStatus = CheckBox1.Selected;
if (checkedStatus == false) {
CheckBox1.Click();
}


我发现只要我使用“ selected”,即使选中该复选框,它也总是返回false。知道如何处理的人吗?