1

我正在构建一个要向其发送电子邮件的用户列表,其编码为(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: cannot check field, no checkbox with id, name, or label 'user_ids_152' found

因为用户 ID 现在是 272。我在 SO 上搜索并找不到合适的解决方案。

建议?

4

1 回答 1

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。

我喜欢防弹网页设计作为入门:

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

于 2012-07-31T21:10:40.267 回答