水豚断言只读字段

Capybara assert read only field

我正在尝试测试以下 html 片段:

<input type="text" value="Pool A" name="name" class="form-control form-control-1-2" required="" readonly="" style="background-color: rgb(222, 224, 226);">

我可以看到元素设置为只读。我更喜欢禁用,但我们开始了!!

有没有一种方法可以使用 Capybara 将输入字段断言为只读?

我在一些文档中遇到了 readonly: true,所以我尝试了:

expect(page).to have_css('name', readonly: true)

但是它没有说 readonly 不是一个有效的选项。

任何帮助将不胜感激

你可以试试这样的

expect(page).to have_selector("input[name='name'][readonly='']")

编辑

你是对的。更新了我的答案。

在进行更深入的搜索后,我发现了一个布尔选项。你可以问一下是不是只读的

如果是,结果为真,当只读属性不存在时(表示要与之交互的可见字段,它将return nil)。

我现在已经写了以下断言。

expect(find(:field, type: 'text', name: 'name').readonly?).to be true

expect(find(:field, type: 'text', name: 'name').readonly?).to be nil

空白时

感谢您的回复。

您可以传递给 find 的任何选择器类型(:field 等)也可以传递给 have_selector。由于 :field 选择器类型将 name/id/associated 标签文本作为其第一个参数,因此检查页面是否具有以 'name' 作为 ID、名称或标签的只读字段的最简洁方法文本是

expect(page).to have_selector(:field, 'name', readonly: true)

可以更简洁地写成

expect(page).to have_field('name', readonly: true)