Cucumber `press button` failure (Capybara::Element

2019-07-09 12:58发布

问题:

I'm a relative newbie starting up a new Ruby on Rails app. I started by following a combination of instructions at https://github.com/intridea/omniauth, http://www.communityguides.eu/articles/16, http://intridea.com/2011/1/31/easy-rails-admin-login-with-google-apps-and-omniauth?blog=company . At the point everything appeared to work correctly, I started to write my very first cucumber features and steps. I was able to get a couple of steps up and running, but I've been bogged down on a step that I thought was built in. I have a form with two submit_tags but I can't get a scenario to successfully pass a basic And I press "button" step.

possibly relevant gems:

rails (3.1.0.rc4)
capybara (1.0.0)
cucumber (1.0.1)
cucumber-rails (1.0.2)
nokogiri (1.4.7)
gherkin (2.4.5)
rack-test (0.6.0)
selenium-webdriver (0.2.2)

section of the form in question:

<%= form_tag :controller => "services", :action => "newaccount" do %>
  <%= submit_tag "confirm", :id => "confirm", :title => "confirm", :value => "confirm", :text => "confirm", :name => "confirm" %> 
  <%= submit_tag "cancel", :id => "cancel", :title => "cancel", :value => "cancel", :text => "cancel", :name => "cancel"  %>
<% end %>

scenario in question:

Scenario: I register with a valid and currently active google account
    Given I am not registered
     When I sign in with a valid and currently active google account
      And I press "confirm"  # <-- THE PROBLEMATIC STEP
     Then I should see "Your account has been created and you have been signed in!"

I think this is the relevant web_step (straight from the default web_steps.rb which I have not edited at all):

When /^(?:|I )press "([^"]*)"$/ do |button|
  click_button(button)
end

relevant cucumber output:

Scenario: I register with a valid and currently active google account            # features/auth_and_auth/initial_tests.feature:6
  Given I am not registered                                                      # features/step_definitions/authentication_steps.rb:1
  When I sign in with a valid and currently active google account                # features/step_definitions/authentication_steps.rb:5
  And I press "confirm"                                                          # features/step_definitions/web_steps.rb:52
    no button with value or id or text 'confirm' found (Capybara::ElementNotFound)
    (eval):2:in `click_button'
    ./features/step_definitions/web_steps.rb:53:in `/^(?:|I )press "([^"]*)"$/'
    features/auth_and_auth/initial_tests.feature:9:in `And I press "confirm"'
  Then I should see "Your account has been created and you have been signed in!" # features/step_definitions/web_steps.rb:105

relevant html output:

<input id="confirm" name="confirm" text="confirm" title="confirm" type="submit" value="confirm">
<input id="cancel" name="cancel" text="cancel" title="cancel" type="submit" value="cancel">

As is obvious, I've accounted for value, id, text, as well as name and title. I also saw a post that said the input type had to be specified as submit which it appears to have been. And I've tried it with both the confirm button and the cancel button.

After searching everywhere that I know about, and trying every suggestion that looked even remotely relevant, I'm at an impasse. What am I missing?

回答1:

I'm not sure if the code below is the best way to deal with the problem I encountered, but it is getting the relevant step to pass.

When /^(?:|I )press "([^"]*)"$/ do |button|
# click_button(button)  # the original web_steps.rb version that fails
  %{I press (button)}   # my revised version that passes
end

I'd still appreciate any feedback on:

  • why the original web_steps.rb version fails,
  • whether this is an appropriate approach or not, and
  • if there is a more 'rails' way to deal with this.