【问题标题】:Find select tag with capybara使用水豚查找选择标签
【发布时间】:2017-08-16 09:37:26
【问题描述】:

我正在尝试在系统测试中使用 capybara 查找选择标记。我在一个页面中有几个选择标签,当用户编辑时我想要一些处于只读模式的标签。 我遇到过其他帖子,但找不到任何有用的东西,尽管我发现了这些选择器,如 find_field、find_button 和 find_link。我正在尝试这样做:

assert_equal true, find_select('id').readonly?.

这行不通。有没有办法做到这一点?

【问题讨论】:

  • 您得到的确切错误是什么?
  • 未定义方法'find_select'

标签: ruby-on-rails tdd capybara minitest


【解决方案1】:

Capybara 没有 find_select 方法,但它有 :select 选择器类型 - https://github.com/teamcapybara/capybara/blob/2.15.1/lib/capybara/selector.rb#L358

find 的第一个参数是选择器类型(如果省略,默认为 :css),因此您可以随心所欲

assert_equal true, find(:select, 'id').readonly?

由于使用非 capybara 提供的断言,它的缺点是不使用任何等待/重试行为。如果元素的状态是动态变化的,这可能会导致时间问题和不稳定的测试。如果您的页面上发生这种情况,您最好使用:field 选择器类型,它提供readonly 过滤器 - https://github.com/teamcapybara/capybara/blob/2.15.1/lib/capybara/selector.rb#L88 - 并且还可以匹配选择元素(:select 选择器没有只读过滤器因为从技术上讲,选择元素不支持只读 - 见下文)。

assert_selector :field, 'id', type: 'select', readonly: true

假设你已经加载了 capybara 提供的 minitest 断言,也可以写成

assert_field 'id', type: 'select', readonly: true

或使用 ':select' 选择器断言和过滤器块

assert_select('i') { |el| el.readonly? }

请注意,在 HTML 中,select 方法实际上并不支持 readonly 属性,所以如果您真正想要的是确保 select 元素被禁用,那么您可以执行以下任何操作

assert_field 'id', type: 'select', disabled: true
assert_select 'id', disabled: true

等等

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多