【问题标题】:Selenium webdriver doesn't recognize this radio element. Can someone assist me?Selenium webdriver 无法识别此单选元素。有人可以帮助我吗?
【发布时间】:2013-03-08 17:51:32
【问题描述】:
<br>
<input id="workedWithGR" type="radio" onclick="showDiv('hiddenInput');" value="yes" checked="" name="workedWithGR" style="border:none;">

<label>Yes</label>

<input id="workedWithGR" type="radio" onclick="hideDiv('hiddenInput');" value="no" name="workedWithGR" style="border:0px;">

对于是和否按钮,我不断收到“Webdriver 未找到元素错误”。我不能做 xpath,因为 id 中有引号。

【问题讨论】:

  • 只需用“\”转义引号即可。你能发布一个 html 的 sn-p 吗?
  • 这里是 xpath //*[@id="workedWithGR"]
  • 我没有看到问题或看到 ID 有引号,“workedWithGR”是完全可以接受的。也许问题是ID发生了变化?如果是这样启动 firebug 并将 Xpath 粘贴在其中,它会返回您期望的元素吗?
  • 我认为它没有使用 id,因为 yes 和 No 都具有相同的 id

标签: java selenium radio-button webdriver


【解决方案1】:

使用标签“值”或子节点“标签”,然后递归地向上树选择正确的元素。例如,我假设您的 html 具有以下内容:

<br>
  <input id="workedWithGR" type="radio" onclick="showDiv('hiddenInput');" value="yes" checked="" name="workedWithGR" style="border:none;">
    <label>Yes</label>
  <input id="workedWithGR" type="radio" onclick="hideDiv('hiddenInput');" value="no" name="workedWithGR" style="border:0px;">
    <label>No</label>

所以试试下面这样关闭节点标签的方法:

//input[@id=\"workedWithGR\"]/label[text()="Yes"]/../input

【讨论】:

  • +1,似乎是一个合理的解决方案,只是另一个可能的 XPath(不会给出另一个答案,因为这个工作正常)可能是://label[text()="Yes"]/ancestor::input[@id="workedWithGR"] ...两者都会得到相同的结果。
【解决方案2】:

我将这种方法用于无线电输入。避免寻找多个输入元素/使用可变数量的具有相同名称的单选按钮。

String valueToSelect = "no";
List<WebElement> radios = driver.findElement(By.name("workedWithGR"));
if (radios.size() == null)
    return ;

for (WebElement radio : radios){
    if (radio.getAttribute("value").equals(valueToSelect)){
        radio.click();
        break;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2016-07-08
    相关资源
    最近更新 更多