水豚没有找到表格元素

这是我第一次尝试Capybara,我似乎无法找到为什么它找不到我的表格元素。

每次我试图找到一个表单元素,

When /^they submit a resolution in Markdown$/ do visit "/resolutions/new" fill_in "title", :with => "Title" fill_in "libelle", :with => "Some text here\n\nNew paragraph" click_button "Submit" end 

它不知道它在哪里,

 Scenario: Submission of a resolution # features/resolutions.feature:5 Given the user is a member # features/step_definitions/user_steps.rb:26 When they submit a resolution in Markdown # features/step_definitions/resolution_steps.rb:8 cannot fill in, no text field, text area or password field with id, name, or label 'title' found (Capybara::ElementNotFound) (eval):2:in `fill_in' ./features/step_definitions/resolution_steps.rb:10:in `/^they submit a resolution in Markdown$/' features/resolutions.feature:7:in `When they submit a resolution in Markdown' 

即使它出现在页面上

  


它似乎已正确呈现。

 Started GET "/resolutions/new" for 127.0.0.1 at 2012-07-06 00:47:24 -0400 [1m[36m (0.0ms)[0m [1mSAVEPOINT active_record_1[0m [1m[35m (0.2ms)[0m UPDATE "users" SET "last_sign_in_at" = '2012-07-06 04:47:24.980196', "current_sign_in_at" = '2012-07-06 04:47:24.980196', "last_sign_in_ip" = '127.0.0.1', "current_sign_in_ip" = '127.0.0.1', "sign_in_count" = 1, "updated_at" = '2012-07-06 04:47:24.980658' WHERE "users"."email" = 'alexandre@membres.jndq.ca' [1m[36m (0.0ms)[0m [1mRELEASE SAVEPOINT active_record_1[0m Processing by ResolutionsController#new as HTML Rendered resolutions/_form.html.erb (3.8ms) Rendered resolutions/new.html.erb within layouts/application (4.9ms) Completed 200 OK in 18ms (Views: 7.9ms | ActiveRecord: 0.2ms) [1m[35m (0.2ms)[0m rollback transaction [1m[36m (0.0ms)[0m [1mbegin transaction[0m [1m[35m (0.0ms)[0m SAVEPOINT active_record_1 [1m[36mUser Exists (0.1ms)[0m [1mSELECT 1 FROM "users" WHERE "users"."email" = 'normand@pq.ui' LIMIT 1[0m [1m[35mSQL (0.3ms)[0m INSERT INTO "users" ("authentication_token", "clearance", "confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "facebook_uid", "id", "last_sign_in_at", "last_sign_in_ip", "name", "parent", "remember_created_at", "sign_in_count", "unconfirmed_email", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["authentication_token", nil], ["clearance", 9], ["confirmation_sent_at", nil], ["confirmation_token", nil], ["confirmed_at", nil], ["created_at", Fri, 06 Jul 2012 04:47:25 UTC +00:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["email", "normand@pq.ui"], ["facebook_uid", nil], ["id", nil], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["name", "Normand Portequi"], ["parent", nil], ["remember_created_at", nil], ["sign_in_count", 0], ["unconfirmed_email", nil], ["updated_at", Fri, 06 Jul 2012 04:47:25 UTC +00:00]] [1m[36m (0.0ms)[0m [1mRELEASE SAVEPOINT active_record_1[0m 

这似乎是显而易见的,但我找不到它。 我找到了这个问题 ,但答案却毫无用处。 即使在查看了Devise + Cucumber示例应用程序之后 ,我也找不到有什么问题。

这对我和我的测试造成了伤害。 有任何想法吗?

尝试在visit "/resolutions/new"后添加puts page.body ,看看你的堆栈跟踪告诉你什么。 您将能够看到表单字段的ID。 例如,虽然我的一个列名为“name”,但渲染的html中的id是“user_name”。

我遇到了类似的问题,事实certificate我需要做的是将“id:”字段添加到表单元素本身。

例如,您有:

 
<%= f.label :title %>
<%= f.text_field :title %>

但是如果你改成它:

 
<%= f.label :title %>
<%= f.text_field :title, id:"title" %>

请注意,我在text_field元素上添加了一个“id”字段。 我不确定为什么Capybara没有找到标签,但这对我有用。 希望它可以帮助你(或其他人)。

这是一个疯狂的猜测,但我认为你需要等待。 不确定’fill_in’是否等待页面可用。 我知道’find’会自动等待。

尝试增加

 Capybara.default_wait_time 

如果您的Rails视图如下所示:

<%= form.text_field :first_name %>

尝试通过将第一部分大写后跟空格然后小写其余部分来调用元素。

fill_in "First name", with: 'Elaine'

这应该这样做,不需要id属性。