【问题标题】: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
      

      只需查看页面源中的 &lt;input name="my_field_name"&gt; 并使用该名称即可。

      【讨论】:

        【解决方案3】:

        我承认我对 capybara 了解不多,但我知道 html。并且您尝试获取的文本位于元素之外(input 元素没有与其直接关联的文本)。这驻留在元素之外往往很难获得。既然如此,我建议将后面的文本放在labelspan 标记中。所以是这样的:

        更改 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] 
          

          【讨论】:

            猜你喜欢
            • 2012-11-08
            • 2018-08-19
            • 1970-01-01
            • 2011-07-28
            • 1970-01-01
            • 2012-07-30
            • 1970-01-01
            • 1970-01-01
            • 2016-08-30
            相关资源
            最近更新 更多