Rails:Capybara,复选框和Ids

时间:2012-07-31 20:22:37

标签: ruby-on-rails ruby capybara

我正在构建一个用户发送电子邮件的列表,编码为(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上找到合适的解决方案。

建议?

1 个答案:

答案 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作为这方面的入门读物:

http://www.simplebits.com/publications/bulletproof/