21 Stimmen

Kann mit Capybara + Rails3 kein Element zum Anklicken finden

Hintergrund : Ich verwende Capybara mit Rspec, um eine Rails 3 Anwendung zu testen. Verwendeter Treiber : Selen

Problem : Ich kann die Schaltfläche "Anmelden" nicht finden, die ich in meinem Test anklicken muss.

HTML-Code:

<form accept-charset="UTF-8" action="/" class="filter_form" id="login" method="post">
        <fieldset>
          <div class="modal-body">
            <div class="clearfix login-fields">
              <label for="user_email">Email</label>
              <div class="input login-inputs">
                <input class="input-text" id="user_email" name="user[email]" placeholder="email" size="30" type="email" value="">
              </div>
            </div>
            <div class="clearfix login-fields">
              <label for="user_password">Password</label>
              <div class="input login-inputs">
                <input class="input-text" id="user_password" name="user[password]" placeholder="password" size="30" type="password">
              </div>
            </div>
          </div>
          <div class="modal-footer">
            <input class="btn btn-primary login_btn" id="btn_login" name="commit" type="submit" value="Sign in">
            <a href="stackoverflow.com/lms/forgot_password" class="btn">Forgot password...</a>
            <a href="#" class="btn close cancel" data-dismiss="modal">Cancel</a>
          </div>
        </fieldset>
</form>

Nicht bestandener Test

it "should login correctly if the right credentials are given", :js => true do

    Capybara.default_wait_time = 5
    Capybara.reset_sessions!
    visit '/'
    click_link('login_link') #this will bring a modal window with the code posted above using js
    within("#login") do
      fill_in 'user_email', :with => "my-email@example.com"
      fill_in 'user_password', :with => "mypwd"
    end

    response.should have_selector('input#btn_login') #This passes
    click_on("input#btn_login") #Here it fails, saying it can't find an element with that selector
    response.should have_selector(:xpath, '//div[@class="alert-message block-message info"]')
  end

Meine Testdatei befindet sich in spec/requests .

Irgendwelche Ideen? Danke!

35voto

suresh.g Punkte 3098

Bitte versuchen Sie dies:

page.find("#btn_login").click

10voto

jnicklas Punkte 2125

Dies: https://stackoverflow.com/a/11348065/1504796

ist die richtige Antwort.

click_on nimmt keinen CSS-Selektor, sondern den Text oder die ID eines Links. Sie wollen click_on("btn_login") . Kein Rautenzeichen oder ähnliches.

7voto

prasad.surase Punkte 6416

Versuchen Sie

find('#id',:visible => true).click

4voto

jasnow Punkte 78

Versuchen Sie "gem 'launchy'" zu Ihrem Gemfile hinzuzufügen und fügen Sie "save_and_open_page"-Zeile vor der fehlgeschlagenen Zeile in der Step-Datei.

REFERENZ: http://techiferous.com/2010/04/using-capybara-in-rails-3/

4voto

sirvine Punkte 1045

Es sieht so aus, als ob Sie versuchen, innerhalb eines modalen css auf eine Schaltfläche zum Abschicken zu klicken. Sie müssen aufrufen, was auch immer dieses modale Element zuerst anzeigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X