我试图在系统测试中使用capybara找到一个select标签。我在页面中有几个选择标签,当用户编辑时,我想要一些处于只读模式。 虽然我找到了像find_field,find_button和find_link这样的选择器,但我已经找到了其他帖子,但找不到任何有用的东西。我想这样做:
assert_equal true,find_select(' id')。readonly?。
这不起作用。有没有办法实现这个目标?
答案 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
等