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
等等