C# - Selenium Webdriver,无法选择radiobutton作为标签显示在它上面

我是Selenium webdriver的新手,我正在使用C#来编写脚本 . 我有一个字段性别有男性和女性选项,这些选项实际上是单选按钮,但显示像标签 .

我尝试了百万种方法来选择它:

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

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

  • driver.FindElement(By.CssSelector("input[type='radio'][value='Male']")) . 点击();

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

NONE 从上面开始工作 . Gender字段的html如下所示:

<li class="radiobutton-yesno ui-buttonset">
	<span class="label">
	Gender                        
		<span class="help-icon" data-title="Your gender is a factor in determining your cost.">
		</span>
	</span>
	<input type="radio" id="genderNo_1" name="gender_1" value="Male" class="reqCntrl ui-helper-hidden-accessible">
		<label for="genderNo_1" class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-left" role="button">
			<span class="ui-button-text">Male</span>
		</label>
	<input type="radio" id="genderYes_1" name="gender_1" value="Female" class="ui-helper-hidden-accessible">
		<label for="genderYes_1" class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-right" role="button">
			<span class="ui-button-text">Female</span>
		</label>
</li>

并且页面上的字段显示如下:enter image description here

回答(3)

2 years ago

<input> 类型可能是通过css / js规则隐藏的 . 所以你可以让你做一些用户无法做到的事情 .

@value 属性也属于radiobutton <input> s,因此在选择器中使用该属性将不起作用,因为隐藏了整个元素 .

相反,使用标签下的 <label><span> 并与其文本匹配:

  • //label/span[text()='Female']

  • //label/span[text()='Male']

PS:这个问题的性质有点令人担忧:

“你的性别是决定你的成本的一个因素 . ”

2 years ago

将无线电放入标签内是一种很好的用户体验 . 尝试更改标记以遵守该规则 . 之后,您应该可以通过在标签上执行单击操作来选择无线电(按文本选择标签为@aneroid显示) .

2 years ago

你能说出Selenium投掷的错误吗?

您可以尝试使用脚本 .

var temp = "var elt = document.getElementById('#myRadioButton'); elt.click();";
driver.executeScript(temp);