我正在指定要带有日期选择器的表单。
expect(page).to have_select('Start date')
和expect(page).to have_select('deal[start_date]')
均不返回匹配项。鉴于日期选择器的html有点时髦(name="deal[start_date(2i)]
)
expect(page).to have_date_select('deal[start_date]')
说水豚无法识别has_date_select
。
有没有办法做到这一点?
答案 0 :(得分:0)
水豚has_select?
谓词和have_select
匹配器查找HTML <select>
元素。根据日期选择器的含义,您将必须使用匹配正确类型的元素的匹配器,或者如果没有特定的匹配器,则使用have_selector
。如果您实际要检查的是一个<input type="date">
元素,且其带有包含文本“开始日期”的关联标签,则可以使用have_field
匹配器:
expect(page).to have_field 'Start date', type: 'date'
如果您使用的是Rails date_select视图助手,它将生成类似HTML的
<div class="field">
<label for="post_start_date">Start date</label>
<select id="post_start_date_1i" name="post[start_date(1i)]">
<option value="2014">2014</option>
<option value="2015">2015</option>
...
</select>
<select id="post_start_date_2i" name="post[start_date(2i)]">
<option value="1" selected="selected">January</option>
<option value="2">February</option>
...
</select>
<select id="post_start_date_3i" name="post[start_date(3i)]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
...
</select>
</div>
通过查看HTML,您可以看到
expect(page).to have_select('post_start_date_1i')
expect(page).to have_select('post[start_date(2i)]')
...
或者您可以将id
过滤器与正则表达式和计数一起使用,以检查是否有3个元素匹配,例如
expect(page).to have_select(id: /^post_start_date_[123]i$/, count: 3)
请注意,从技术上讲,这不像单独进行操作那样“正确”,因为您实际上可以拥有3个ID为post_start_date_1i的元素,并且该元素仍会通过,但在这种情况下,您的HTML也将无效。
如果这不是您要检查的HTML元素的类型,则需要提供HTML以获得准确的答案。