【问题标题】:Select Radio Button in a group using Selenium WebDriver with Java使用 Selenium WebDriver 和 Java 在组中选择单选按钮
【发布时间】:2014-06-18 22:17:17
【问题描述】:

我希望能够在由 name 属性标识的一组(单选按钮)中选择一个单选按钮:

<div>
    <input type="radio" name="exampleInputRadio" id="optionRadio1" value="1">
    <input type="radio" name="exampleInputRadio" id="optionRadio2" value="2">
    <input type="radio" name="exampleInputRadio" id="optionRadio3" value="3">
    <input type="radio" name="exampleInputRadio" id="optionRadio4" value="4">
</div>

我使用以下代码来做我想做的事:

public void exampleInputRadio(WebDriver driver, int option) {
    List<WebElement> radios = driver.findElements(By.name("exampleInputRadio"));
    if (option > 0 && option <= radios.size()) {
        radios.get(option - 1).click();
    } else {
        throw new NotFoundException("option " + option + " not found");
    }
}

问题在于 Selenium 总是选择第一个单选按钮,无论 option 参数的值是什么。

当我在上面的方法中编码时:

for (int i = 0; i < radios.size(); i++) {
    System.out.println(radios.get(i).getAttribute("id"));
}

我得到这个输出:

optionRadio1
optionRadio2
optionRadio3
optionRadio4

【问题讨论】:

  • 这对我来说绝对没问题。您能否发布您的选项被调用的内容和方式。
  • @nitinchawda 对不起,我面前没有代码,但即使我在上面的方法中做radios.get(3).click(),第一个单选按钮也会被选中。如果有帮助,我会使用最新版本 (2.41.0) 的 selenium。
  • 不确定是否与版本问题有关。我有 Firefox 29、chrome 34 和 selenium 2.39 版本。这在两种浏览器上都非常有效。
  • @user1177636 不,我使用的是 Firefox 28
  • 我找到了解决方案。输入进入label 标签。很抱歉给您带来不便...

标签: java html selenium selenium-webdriver webdriver


【解决方案1】:

代码在 Firefox 28 上对我来说绝对可以正常工作。 我尝试过这样的事情:

功能:

public void exampleInputRadio(WebDriver driver, int option) {
        List<WebElement> radios = driver.findElements(By.name("exampleInputRadio"));
        if (option > 0 && option <= radios.size()) {
            radios.get(option - 1).click();
        } else {
            throw new NotFoundException("option " + option + " not found");
        }
    }

调用的函数:

TestClass tc = new TestClass();
tc.exampleInputRadio(driver, 1);
tc.exampleInputRadio(driver, 2);
tc.exampleInputRadio(driver, 3);
tc.exampleInputRadio(driver, 4);

【讨论】:

    【解决方案2】:

    一个简单的解决方法是使用valueid 属性。

    driver.findElement(By.id("optionRadio" + (option + 1))).click();
    

    【讨论】:

    • 感谢您的解决,但我想使用“名称”属性,但不知道为什么它不起作用
    • 您可以使用名称为“exampleInputRadio”、ID 为“optionRadio”+(option+1)的 xpath
    【解决方案3】:

    你也可以使用 xpath,像这样:

    driver.findElement(By.xpath("//input[@value='1]")).click();
    

    【讨论】:

    • 您是否缺少撇号?例如@value='1'
    猜你喜欢
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多