我正在编写代码以在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")
基本上你找到了标签,转到父节点,然后转到它的输入子节点。希望这可以帮助其他任何人解决这个问题!
答案 0 :(得分:0)
HTML中存在缺陷 - 标签should reference an ID(for
)的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})]]";
希望它适合你:)