【问题标题】:Why jquery code don't work in capybara tests为什么 jquery 代码在 capybara 测试中不起作用
【发布时间】:2020-06-12 09:24:20
【问题描述】:

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

我使用这段代码来选择元素

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

我使用站点棱镜宝石

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'

我收到这个错误

失败/错误:search_page.search_room1_child_ages.click

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

【问题讨论】:

  • 如果有机会帮助您,我们需要更多信息。还可以尝试查看控制台日志,看看您的代码不起作用的页面是否有错误
  • 在 webdriver 中,我看到第一部分(选择子编号)有效,但没有出现年龄选择框。
  • 我们需要查看您的代码。

标签: jquery rspec capybara ruby-on-rails-6


【解决方案1】:

您显示的具体错误是因为您尝试在调用由 site_prisms elements 定义的内容时调用 clickelements 定义了一个返回多个元素的方法,因此 click 没有在其上定义,因为 click 仅对单个 element 有意义。你可能打算拥有

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

在您的站点棱镜部分定义中。虽然如果你要使用很多像这样命名的元素,你真的应该使用内置的 Capybara 选择器类型

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

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

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

【讨论】:

  • jquery 的问题,即年龄选择框未添加到 DOM 中,当我在 webdriver 中运行测试时,我看不到它。我认为这是错误的原因。
【解决方案2】:

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

RAILS_ENV=test rake assets:precompile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多