我正在构建一个用户发送电子邮件的列表,编码为(haml,虽然这不是重点)
- @users.each do |user|
.field<
= check_box_tag "user_ids[#{user.id}]",user.id
%nbsp
= user.name
代码工作正常(虽然它可能可能被重构)。但是,我在编写Capybara测试时遇到问题,因为对象ID会随着时间而变化。例如,我有以下黄瓜测试:
.....
Given user "User one" exists
And "User two" esists
......
When I check "user_ids_152"
And I check "user_ids_153"
.....
我明白了 Capybara :: ElementNotFound:无法检查字段,没有找到带有id,name或标签'user_ids_152'的复选框
因为用户ID现在是272.我搜索了,无法在SO上找到合适的解决方案。
建议?
答案 0 :(得分:1)
我不确定您的要求,但为您的复选框添加HTML标签会让您更容易通过Capybara进行一致检查:
%label{ :for => "user_ids_#{user.id}"}
= check_box_tag "user_ids[#{user.id}]",user.id, :id => "user_ids_#{user.id}"
= user.name
然后你可以这样做:
When I check "User one"
我应该补充一点,你写的格式更好,符合标准的HTML越多,从长远来看你就越容易使用像Capybara这样的东西。 rails视图帮助程序在您使用它们时可以很好地帮助您,但只需记下您在其外部生成的任何HTML。
我喜欢Bullet Proof Web Design作为这方面的入门读物: