【问题标题】:Get Selected Radio button text with Capybara使用 Capybara 获取选定的单选按钮文本
【发布时间】:2016-09-21 21:36:20
【问题描述】:
我有如下单选按钮
<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
如何获取文本 Overide 或 Inherit
我试过了
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 解决方案。
感谢您的帮助!
【问题讨论】:
标签:
xpath
radio-button
css-selectors
capybara
【解决方案1】:
这样做
find("#Overriden", :checked => 'checked').value
我在我的应用程序中这样使用它
find("input[name=payment]", :checked => true).value
由于我的单选按钮组名称是“付款”,我将属性设置为“已检查”= true/false
所以如果你到现在还没有得到任何解决方案,我的回答肯定对你有用。
【解决方案2】:
这对我有用:
find("[name='my_field_name'][checked]").value
根据您的表单,您的字段名称可能包含尖括号,这很好:
find("[name='payment[payment_type]'][checked]").value
只需查看页面源中的 <input name="my_field_name"> 并使用该名称即可。
【解决方案3】:
我承认我对 capybara 了解不多,但我知道 html。并且您尝试获取的文本位于元素之外(input 元素没有与其直接关联的文本)。这驻留在元素之外往往很难获得。既然如此,我建议将后面的文本放在label 或span 标记中。所以是这样的:
更改 HTML
<input id="Overriden" type="radio" value="true" name="Overriden" checked="checked" title="Current Setting"><label>Override</label>
然后选择这样的东西
(这里显示了我缺乏 capybara 的能力:我不知道它是否在其find 字符串中采用 css 相邻兄弟选择器 +,但是您可以选择相邻兄弟(下一个元素) 到你在水豚的input。)
find("#Overriden[checked='checked'] + label").text
【解决方案4】:
感谢您的回答。我设法用黑客攻击它。我无法更改 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]