为什么 jquery 代码在水豚测试中不起作用

Why jquery code don't work in capybara tests

我有一个 select 框来选择 child 的数量,当我选择选项时,其他 select 框必须出现才能选择年龄。

我用这段代码来选择元素

search_page.search_room1_child.click
search_page.search_room1_child_options[1].click
search_page.search_room1_child_ages.click
search_page.search_room1_child_ages_options[8].click

我用site-prismgem

element :search_room1_child, 'select[name="filter[rooms][room1][child]"]'
elements :search_room1_child_options, 'select[name="filter[rooms][room1][child]"] option'
elements :search_room1_child_ages, 'select[name="filter[rooms][room1][child_ages][]"]'
elements :search_room1_child_ages_options, 'select[name="filter[rooms][room1][child_ages][]"] option'

我收到这个错误

Failure/Error: search_page.search_room1_child_ages.click

 NoMethodError:
   undefined method `click' for []:Capybara::Result

您显示的特定错误是因为您试图根据调用 site_prisms elements 定义的内容的结果调用 clickelements 定义了一个 returns 多个元素的方法,因此 click 没有定义,因为 click 只对单个 element 有意义。你可能想要

element :search_room1_child_ages, 'select[name="filter[rooms][room1][child_ages][]"]'

在您的站点棱镜部分定义中。虽然如果你要使用很多具有这样名称的元素,你真的应该使用 built-in Capybara 选择器类型

element :search_room1_child_ages, :select, name: "filter[rooms][room1][child_ages][]"

或者,更好的是,考虑注册 Capybara 自定义选择器以真正清理您的代码。

注意:我真的不确定您的问题与标题中所述的 jQuery 有什么关系

我通过在测试环境中预编译资产解决了这个问题

RAILS_ENV=test rake assets:precompile