使用watir中的xpath获取所选单选按钮旁边的杂散文本

时间:2011-11-21 17:36:01

标签: xpath watir

我在单选按钮组中的单选按钮旁边有一些杂散文本。我尝试使用xpath和watir获取它,但我没有运气。这是一些HTML示例

<html> 
<head></head> 
<body> 
 <input type="radio" name="options" value="No">No <br />
 <input type="radio" name="options" value="Yes">Yes <br />
 <input type="radio" name="options" value="Maybe">Maybe <br />
</body> 
</html> 

我可以使用xpath by

获取所选的单选按钮
selectedRadio = browser.radio(:xpath,"//input[@checked and @name='options']")

如何选择相应的单选按钮?我也尝试使用Watir获取它,但是.text方法不适用于Watir :: RadioButton对象,因为文本是杂散文本所以这是真的。

提前致谢。

2 个答案:

答案 0 :(得分:2)

给出的HTML不是格式良好的XML,所以我认为表达式将取决于Waitr如何解析输入。如果它认为文本是input元素的子元素,就像这样:

<input type="radio" name="options" checked="checked" value="No">No </input><br />
<input type="radio" name="options" value="Yes">Yes </input><br />
<input type="radio" name="options" value="Maybe">Maybe </input><br />

然后使用这个表达式:

//input[@checked and @name='options']/text()

另一方面,如果它自动关闭input并将文本视为兄弟,请执行以下操作:

<input type="radio" name="options" checked="checked" value="No"/>No <br />
<input type="radio" name="options" value="Yes"/>Yes <br />
<input type="radio" name="options" value="Maybe"/>Maybe <br />

然后使用以下表达式:

//input[@checked and @name='options']/following-sibling::text()[1]

我的猜测是第二个是正确的,因为你已经说过.text没有用。

答案 1 :(得分:0)

要求开发人员通过ID值将与单选按钮关联的文本放在与按钮关联的label内,使页面更易于测试

<form>
  <input type="radio" name="sex" id="male" />
  <label for="male">Male</label>
  <br />
  <input type="radio" name="sex" id="female" />
  <label for="female">Female</label>
</form>

然后,您可以获取所选按钮的ID,并轻松找到相关的标签文本。

说真的,这对他们来说可能要比你必须处理草率的页面代码容易得多。它还为它们提供了更多格式化选项(通过CSS),以便在标签容器中包含该文本。赢得四处游戏。