【问题标题】:Cannot check the radio button in selenium webdriver无法检查 selenium webdriver 中的单选按钮
【发布时间】:2014-03-01 16:18:44
【问题描述】:

任何人都可以帮助我使用这个单选按钮,不要对此有任何想法。我需要用value="inside"检查一个元素

我的代码:

driver.FindElement(By.XPath("//[string(@value)='inside']")).Click();

失败并出现错误“无法评估 xpath 表达式或不会生成 WebElement” 使用 C# 和 IEdriver。

下面是 DOM:

<td colspan="3">
                    Fieldnames

    <label>
        <input name="labelPosition-step-1" type="radio" value="above" checked="checked">
        Above
    </label>
            Or

    <label>
        <input name="labelPosition-step-1" type="radio" value="inside">
        Inside
    </label>
            Or

    <label>
        <input name="labelPosition-step-1" type="radio" value="left">
        Left
    </label>


</td>

【问题讨论】:

  • 您应该创建能够正确抓取元素的通用 xpath,并动态获取此类元素的值。如果您对 xpath 中的值进行具体说明,那么类似代码的行数将会增加。确保您的 xpath 已优化并由 Jens Erat 回答,这将是正确的 xpath,但此外,您还可以将两个属性的类型和值指定为 //input[@type='radio' and @value='inside'] 或只是检索所有无线电输入元素的 //input[@type=radio],您可以获得值其中通过遍历driver.findElements 实现的WebElements 列表

标签: c# internet-explorer selenium xpath selenium-webdriver


【解决方案1】:

您的 XPath 表达式缺少您要查找的元素,因此无效。

我猜你只是在搜索 &lt;input&gt; 元素。我还删除了不必要的string(...) 函数调用。

driver.FindElement(By.XPath("//input[@value='inside']")).Click();

【讨论】:

  • 谢谢,这行得通!帮了我很多,但我尝试了“//input[@value=inside]”但没有找到。 '' 符号是否提高了元素搜索的效率?
  • 该查询正在寻找输入元素,其@value 属性值等于&lt;inside/&gt; 元素的子元素的文本内容(类似于&lt;input value="foo"&gt;&lt;inside&gt;bar&lt;/inside&gt;&lt;/input&gt;)。没有引号,你与一个节点进行比较,有引号,你与一个字符串进行比较。
【解决方案2】:

我必须获得所有选项并循环遍历它们

IWebElement option = driver.FindElement(By.Id("labelPosittion-step-1"));
//List<IWebElement> Links = new List<IWebElement>(option.FindElements(By.XPath(".//tbody/tr/td")));
List<IWebElement> Links = new List<IWebElement>(driver.FindElements(By.ID("labelPosittion-step-1")));    

for (int k = 0; k < Links.Count; k++)
{
    if (Links[k].Text == "inside")
    {
    option = Links[k];
    }
}
option.Click();

【讨论】:

    【解决方案3】:

    试试这个:

    driver.FindElement(By.CssSelector("[value='inside']")).Click();
    

    Xpath:

    driver.FindElement(By.XPath("//input[contains(@value,'inside']")).Click();
    

    【讨论】:

      【解决方案4】:

      你也可以尝试两个属性的组合,

      driver.FindElement(By.CssSelector("input[type='radio'][value='inside']")).Click();
      

      【讨论】:

      • 啊,你,以后会帮到我的!
      【解决方案5】:

      这是一个帮助库,用于使用 c# linq-esq 语法创建 xpath 表达式。发帖以防您觉得有帮助。

      http://www.syntaxsuccess.com/viewarticle/how-to-create-xpath-using-linq

      例子

      var xpath = CreateXpath.Where(e => e.TargetElementName == "input" 
                        && e.Attribute("value").Text == "inside");
      

      生成的 xpath:

      "//input[@value='inside']"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-17
        • 1970-01-01
        • 2014-07-11
        • 2016-03-02
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多