【问题标题】:Capybara is not choosing radio button without JavaScriptCapybara 不选择没有 JavaScript 的单选按钮
【发布时间】:2021-03-14 12:31:39
【问题描述】:

我有一个带有两个单选按钮的 Rails 应用程序。

我注意到我的 Capybara 测试(使用 RSpec)不会选择“否”单选按钮,除非它使用 JavaScript 驱动程序运行(我使用 selenium_chrome_headless)。测试套件还有许多其他 Capybara 测试,它们在没有 JS 的情况下提交表单,除非需要,否则我会避免启用 JS 驱动程序。

在这种情况下,我不明白是什么阻止 Capybara 在没有 JS 的情况下选择单选按钮

ERB 表单(使用simple_form):

<%= b.input :baz,
  as: :radio_buttons,
  label: ''
%>

生成此 HTML:

<fieldset class="form-group radio_buttons optional foo_bar_baz form-group-valid">
  <legend class="col-form-label pt-0"></legend>
  <input type="hidden" name="foo[bar_attributes][baz]" value="">

  <div class="form-check">
    <input class="form-check-input is-valid radio_buttons optional" type="radio" value="true" checked="checked" name="foo[bar_attributes][baz]" id="foo_bar_attributes_baz_true">
    <label class="collection_radio_buttons" for="foo_bar_attributes_baz_true">Yes</label>
  </div>

  <div class="form-check">
    <input class="form-check-input is-valid radio_buttons optional" readonly="readonly" type="radio" value="false" name="foo[bar_attributes][baz]" id="foo_bar_attributes_baz_false">
    <label class="collection_radio_buttons" for="foo_bar_attributes_baz_false">No</label>
  </div>
</fieldset>

还有水豚测试:

describe 'Selecting "No"', js: true do
  it 'saves the information' do
    fill_in 'Name', with: 'Alice'
    choose 'No'
    click_button 'Continue'
  end
end

哪个有效。

但是当我在没有js: true 的情况下运行相同的测试时,提交表单会从foo_bar_attributes_baz_true 发送默认值。我没有收到 Capybara 的错误消息,说它找不到或无法选择单选按钮(尽管我确实尝试给它一个 id 或 CSS 选择器,但总是得到相同的查询参数)。

这两种设置(使用和不使用 JavaScript 驱动程序)之间有什么不同,导致 Capybara choose 方法实际上不设置输入值,除非启用 JavaScript?

【问题讨论】:

  • 可能是 CSS 框架一开始就在幕后使用了一点 JS 来创建单选按钮?

标签: javascript ruby-on-rails rspec selenium-chromedriver capybara


【解决方案1】:

发生这种情况是因为您的“否”单选按钮是只读的,因此无法选择。 我假设在使用真正的浏览器运行时,您有一些 JS 正在删除单选按钮的只读性。

更新:在考虑了更多之后。 readonly 属性实际上在单选按钮 元素上无效,因此 Capybara 中存在一个错误,它正在考虑该属性,但您的 HTML 在技术上也是无效的,所以...

仅供参考:Capybara 主分支现在应该忽略单选按钮上的只读属性

【讨论】:

  • 哦,我完全错过了“只读”属性!感谢您的回答和更新。我在 simple_form 存储库上打开了一个问题,以调查“只读”属性的来源,以及这是否是单选按钮的问题。
  • @martini-bonanza 不客气 -- 不要忘记接受答案,这样问题就会被标记为已回答
猜你喜欢
  • 2014-03-31
  • 2018-08-19
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多