【问题标题】:Issue selecting Radio button in Selenium Webdriver在 Selenium Webdriver 中选择单选按钮的问题
【发布时间】:2014-06-24 22:50:05
【问题描述】:
<table id="Content_Content_Content_ctlCaseInfo_rdochldplcm" class="fltLeft">
        <tr>
            <td><input type="radio" id="Content_Content_Content_ctlCaseInfo_rdochldplcm_0" name="ctl00$ctl00$ctl00$Content$Content$Content$ctlCaseInfo$rdochldplcm" value="0" /><label for="Content_Content_Content_ctlCaseInfo_rdochldplcm_0">No</label></td><td><input type="radio" id="Content_Content_Content_ctlCaseInfo_rdochldplcm_1" name="ctl00$ctl00$ctl00$Content$Content$Content$ctlCaseInfo$rdochldplcm" value="1" /><label for="Content_Content_Content_ctlCaseInfo_rdochldplcm_1">Yes</label></td>
        </tr>
    </table>

当我尝试 driver.FindElement(By.Id("Content_Content_Content_ctlCaseInfo_rdochldplcm")).Click(); 它点击“是” 当我尝试 driver.FindElement(By.Id("Content_Content_Content_ctlCaseInfo_rdochldplcm_0")).Click(); 或者 driver.FindElement(By.Id("Content_Content_Content_ctlCaseInfo_rdochldplcm_1")).Click(); 什么都没有发生,也没有单选按钮被选中。

请提出处理这种情况的方法..非常感谢!!

【问题讨论】:

    标签: selenium


    【解决方案1】:

    通过 XPath 单击单选按钮可能会更好。
    在您的具体情况下,XPath 用于:

    是 - 单选按钮:

    "//input[contains(@id, 'rdochldplcm') and contains(@value, 1)]"
    

    否 - 单选按钮:

    "//input[contains(@id, 'rdochldplcm') and contains(@value, 0)]"
    

    在这种情况下,如果您想单击“是”单选按钮,您可以这样做:

    string yesRadioButtonXPath = "//input[contains(@id, 'rdochldplcm') and contains(@value, 1)]"
    IWebElement yesRadioButton = driver.FindElement(By.XPath(yesRadioButtonXPath));
    yesRadioButton.Click();
    

    对于“否”单选按钮,您可以使用:

    string noRadioButtonXPath = "//input[contains(@id, 'rdochldplcm') and contains(@value, 0)]"
    IWebElement noRadioButton = driver.FindElement(By.XPath(noRadioButtonXPath));
    yesRadioButton.Click();
    

    由于您使用的是表格,因此 XPath 可能会返回多个元素。在这种情况下,您需要使用不同的方法来整理元素,但是对于您要查找的内容,此方法应该可以工作。

    【讨论】:

      【解决方案2】:

      这完美解决了我的问题

      我有一个页面,其中包含 6 个组中的 18 个单选按钮,分别代表“是”、“否”和“否” 我试图通过 ID 获取它们,但它是由应用程序随机分配的 但是使用名称和值标签就可以了。

      收音机基本上是这样定义的:

      input value="2" class="x-form-radio x-form-field" autocomplete="off" id="randID_13578" name="emailNotifiyOptionAllow" type="radio">

      每次我打开这个页面的 id 都是不同的,所以使用

      "//输入[包含(@name, 'emailNotifyOptionAllow') 和包含(@value, 1)]"

      解决了。

      感谢

      【讨论】:

        【解决方案3】:

        使用这个:

        //First get the list of values from the radio button
        
        List < WebElement > elements = driver.findElements(By.cssSelector("table[id='Content_Content_Content_ctlCaseInfo_rdochldplcm'] > td"));
        
        WebElement value;
        
        //use loop for searching the particular element
        
        for(WebElement element : elements){
        
        //Getting the value of the element
        value = element.findElement(By.cssSelector("label")).getText();
        
        //condition to click on the element
          if(value.trim().equals("No")){ //Here value is hard coded. You can take from excel sheet also
        
            // If condition satisfies, it will click on the element
        
            element.findElement(By.cssSelector("input").click();
        }
        
        }
        

        这也可以作为一个通用函数使用。

        【讨论】:

          【解决方案4】:

          尝试使用 [0] 和 [1] 代替下划线。

          【讨论】:

          • 没用 ..我得到了 OpenQA.Selenium.NoSuchElementException 异常:无法定位元素。请高手..help..
          【解决方案5】:

          使用下面给出的CSS 尝试您的代码:

          第 1 步: 通过提供的 HTML Piece 我们可以导出单选按钮的 CSS

          css=#Content_Content_Content_ctlCaseInfo_rdochldplcm input 
          

          第 2 步:

          使用 Web 驱动程序代码单击单选按钮

          driver.findElement
             (By.cssSelector("#Content_Content_Content_ctlCaseInfo_rdochldplcm input"))
                .click();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-21
            相关资源
            最近更新 更多