用水豚测试 simple_form

Testing a simple_form with capybara

我有一个 simple_form:

= simple_form_for @client_email, url: { action: "update" }, html: {class: "search_form",  method: :put } do |f|
  = f.error_notification

  .input-row
    = f.input :old_domain, :label => "Old domain name", required: true , input_html: {name: 'search_term'}
    = f.input :new_domain, :label => "New domain name", required: true

[底部有额外的内容供提交]

我正在尝试使用 capybara/cucumber 进行测试。

我可以将内容添加到 :old_domain 中:

@session.fill_in('search_term', with: search_term)

但是,我不知道 "new_domain" 使用什么...我尝试添加一个 id: 到 f.input 行,但这没有帮助.. .

HTML 中的 :new_domain 行是:

<div class="input string required client_email_new_domain">
   <label class="string required control-label" for="client_email_new_domain">
      <abbr title="required">*</abbr> New domain name</label>

   <input class="string required" id="client_email_new_domain" 
      name="client_email[new_domain]" type="text" /></div>

预计到达时间: 我相信它应该寻找名称字段,所以 "client_email[new_domain]",但我收到水豚错误:

  Unable to find field "client_email[new_domain]" (Capybara::ElementNotFound)
  ./features/pages/change_client_domains_page.rb:22:in `to_domain'
  ./features/step_definitions/change_client_domains_steps.rb:18:in `/^I set to_domain to "(.*?)"$/'
  features/admin/change_client_domains.feature:42:in `And I set to_domain to "neworg.com"'

fill_in 采用输入 id、名称、占位符或相关标签文本,因此给定 HTML,前提是以下任何一项都应填写新域输入

fill_in 'client_email_new_domain', with: 'whatever'
fill_in 'client_email[new_domain]', with: 'whatever'
fill_in 'New domain name', with: 'whatever'

如果其中任何一个不起作用,那么您实际上并没有在您认为可见的 HTML 页面上。在这种情况下,使用 @session.save_and_open_screenshot 查看页面的实际外观,并查看 @session.html 以查看页面的 HTML 在您尝试填写页面时的实际情况(假定 @session 实际上是您正在测试的 Capybara 会话 - 否则对当前会话使用 page)。

需要注意的一件事是,如果您将任何 JS 小部件行为附加到隐藏原始输入的输入。如果是,那么您需要与小部件添加到页面的可见元素而不是隐藏的原始输入元素进行交互。

最后一种可能性是 @session 实际上不是您访问页面的会话。不确定为什么要在实例变量中传递当前会话,除非您正在测试多个会话数?