Selenium-按标签单击复选框

时间:2016-08-09 22:03:25

标签: c# selenium selenium-webdriver

我正在编写代码以在C#中使用Selenium测试网页,我需要单击带有动态生成参数的复选框。这是html的片段:

<input type="checkbox" value="2948" onclick="locBoxOnClick(this, 0);" name="locCombo2948">
  <label for="locCombo2948">
    AL          
    <br>
  </label>

我可以使用XPath找到标签但是当我尝试实际点击该框时,没有任何反应。

代码:

By.XPath("(//*[contains(text(), '" + appDto.StatePicker_SpecificCheckbox +     "')])").Click();

编辑: 最后使用一个有点贫民窟的方法解决了它,但它起作用了:

By.XPath(".//label[contains(text(), '" + appDto.StatePicker_SpecificCheckbox     + "')]/../input")

基本上你找到了标签,转到父节点,然后转到它的输入子节点。希望这可以帮助其他任何人解决这个问题!

4 个答案:

答案 0 :(得分:0)

HTML中存在缺陷 - 标签should reference an IDfor)的locCombo2948属性的值。但是,输入没有ID,只有名称。因此,单击标签(因为您的xPath选择器实际上是标记标签,而不是复选框),它不会产生任何影响。

不知道您是否可以修复HTML。如果没有,您只需单击复选框本身,使用类似

的内容
By.CssSelector("input[name='locCombo2948']").Click()

答案 1 :(得分:0)

您的XPath找到<label>元素,而不是<input>元素。在某些浏览器中,这不可点击。尝试搜索包含<input>元素的<label>元素:

//*[contains(text(), '" + appDto.StatePicker_SpecificCheckbox + "')]/ancestor::input

答案 2 :(得分:0)

实际上您使用了错误的xpath,您提供的xpath正在使用label元素找到input元素,所以您应该使用label尝试使用xpath下方的标签文本选择复选框: -

appDto.StatePicker_SpecificCheckbox = "AL"

By.XPath(".//input[following-sibling::label[contains(., '" + appDto.StatePicker_SpecificCheckbox + "')]]").Click();

答案 3 :(得分:0)

我建议你使用这个xpath:

string Xpath = $"//input[.//label[contains(.,{appDto.StatePicker_SpecificCheckbox})]]";

希望它适合你:)