使用Capybara获取选定的单选按钮文本

时间:2012-12-06 15:15:42

标签: xpath radio-button css-selectors capybara

我有单选按钮,如下所示

<input id="Overriden" type="radio" value="false" name="Overriden" title="Current Setting" disabled="">Inherit
<input id="Overriden" type="radio" value="true" name="Overriden" checked="checked" title="Current Setting">Override

如何获取文本覆盖或继承

我试过了

find("#Overriden[checked='checked']").text
find("#Overriden[checked='checked']").label
find("#Overriden[checked='checked']").innerHTML
find("#Overriden[checked='checked']").value ( which gives me true or false which I am not after)

XPATH解决方案也欢迎。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

这样做

  

find(“#Overriden”,:checked =&gt;'checked')。value

我在我的应用中使用了这个

  

find(“input [name = payment]”,:checked =&gt; true).value

由于我的单选按钮组名称为“payment”,因此我将属性设置为“checked”= true / false

所以如果到现在为止你没有得到任何解决方案,我的答案肯定会对你有用。

答案 1 :(得分:1)

这对我有用:

find("[name='my_field_name'][checked]").value

根据您的表单,您的字段名称可能包括尖括号,这很好:

find("[name='payment[payment_type]'][checked]").value

只需查看页面来源中的<input name="my_field_name">并使用该名称即可。

答案 2 :(得分:0)

我在前面承认我对水豚不太了解,但我知道html。并且您尝试获取的文本位于元素之外(input元素没有与其直接关联的文本)。居住在元素之外的元素往往难以获得。既然如此,我建议将以下文字放在labelspan标记中。所以像这样:

更改HTML

<input id="Overriden" type="radio" value="true" name="Overriden" checked="checked" title="Current Setting"><label>Override</label>

然后选择

这样的东西

(这里显示了我缺乏水豚的功能:我不知道它的+字符串中是否需要css邻近兄弟选择器find,但是你可以选择相邻的兄弟(下一个元素)到你的水豚input。)

find("#Overriden[checked='checked'] + label").text

答案 3 :(得分:0)

感谢您的回答。我设法用黑客攻击它。我无法更改HTML,因为这是一个简短的项目,而应用程序来自另一个团队。

 settings=[] 
 pos=0
 i=0 
 all("div.inheritence").each do |elem|
   within(elem) do 
    all("#Overriden").each do |input_tag|
     i+=1 
     within(input_tag) do 
       if input_tag[:checked] 
           pos=i 
       end 
     end
    end 
   end 
   set=elem.text 
   settings =set.scan(/\w+/) 
  end 
settings[pos]