找到与水豚一起选择的标签

时间:2017-08-16 09:37:27

标签: ruby-on-rails tdd capybara minitest

我试图在系统测试中使用capybara找到一个select标签。我在页面中有几个选择标签,当用户编辑时,我想要一些处于只读模式。 虽然我找到了像find_field,find_button和find_link这样的选择器,但我已经找到了其他帖子,但找不到任何有用的东西。我想这样做:

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

这不起作用。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分: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?

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

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

假设您已经加载了水豚提供的最小的断言,也可以写成

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

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

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

但请注意,在HTML中,select方法实际上并不支持readonly属性,因此如果你真正想要的是确保select元素被禁用,那么你可以做任何

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