找到 select 个带有水豚的标签

Find select tag with capybara

我试图在系统测试中使用水豚找到一个 select 标签。我在一个页面中有几个 select 标签,当用户编辑时,我希望其中一些处于只读模式。 我遇到过其他 post 但找不到任何有用的东西,尽管我发现这些 select 或 find_field、find_button 和 find_link。我正在尝试这样做:

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

这是行不通的。有办法实现吗?

水豚没有 find_select 方法,但它确实有 :select select 或类型 - https://github.com/teamcapybara/capybara/blob/2.15.1/lib/capybara/selector.rb#L358

find 的第一个参数是 selector 类型(如果省略则默认为 :css )所以你可以用

做你想做的事
assert_equal true, find(:select, 'id').readonly?

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

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

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

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

或使用“:select”select或断言和过滤器块

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

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

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

等等