Cucumber + selenium fails randomly
-
12-09-2019 - |
Question
My selenium tests like to fails randomly. As an example I have this scenario
Scenario: I should be able to edit a user
Given I created a user with the login "test@example.com"
And I am viewing the user with login "test@example.com"
Then I should see "Edit this user"
When I click "Edit this user"
Then I should be editing the user with login "test@example.com"
When I press "Update"
Then I should be viewing the user with login "test@example.com"
And I should see "User was successfully updated."
This, along with the others, work fine using the basic webrat :rails mode. In selenium, the line
Then I should be editing the user with login "test@example.com"
and
Then I should be viewing the user with login "test@example.com"
fail randomly, in that sometimes the first fails, other times the seconds fails. Using the website by hand results in the correct operation, and like I said, the webrat/rails mode works fine.
Rails 2.2.2 Cucumber 0.3.7 selenium 1.1.14 (fixed to work with FF3)
Some extra info:
Scenario: I should be able to edit a user # features/admin_priviledges.feature:26
Given I created a user with the login "test@example.com" # features/step_definitions/global_steps.rb:18
And I am viewing the user with login "test@example.com" # features/step_definitions/global_steps.rb:60
Then I should see "Edit this user" # features/step_definitions/webrat_steps.rb:93
When I click "Edit this user" # features/step_definitions/webrat_steps.rb:18
Then I should be editing the user with login "test@example.com" # features/step_definitions/global_steps.rb:66
expected: "/users/8/edit",
got: "/users/8" (using ==)
Diff:
@@ -1,2 +1,2 @@
-/users/8/edit
+/users/8
(Spec::Expectations::ExpectationNotMetError)
features/admin_priviledges.feature:31:in `Then I should be editing the user with login "test@example.com"'
When I press "Update" # features/step_definitions/webrat_steps.rb:14
Then I should be viewing the user with login "test@example.com" # features/step_definitions/global_steps.rb:66
And I should see "User was successfully updated."
Then /^I should be (editing|viewing) the (\w+) with (\w+) "([^\"]*)"$/ do |action,model,field,value|
func = make_func(action,model)
m = find_model_by_field_and_value(model,field,value)
URI.parse(current_url).path.should == eval("#{func}(m)")
end
Those are the relevant steps. The press "Update" one is a standard webrat step (click_button)
Solution
Changing a webrat step from
When /^I press "([^\"]*)"$/ do |button|
click_button(button)
end
to
When /^I press "([^\"]*)"$/ do |button|
click_button(button)
selenium.wait_for_page_to_load
end
it works. Telling selenium to wait fixes!
OTHER TIPS
Have you looked at the timing of the requests? My gut says it is that selenium is moving too fast.
Can you post your cucumber steps and the error messages and log details for each failure?