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!

3voto

ebeland Punkte 1533

Ich glaube nicht, dass click_on einen solchen Locator annimmt - ich glaube, es will nur eine ID, einen Namen oder einen Wert. Versuchen Sie als Experiment, click_on("input#btn_login") mit zu ersetzen:

page.find('#btn_login').click

3voto

user2393426 Punkte 155
  • click_button("Anmelden")
  • find(:xpath, "//*[@id='btn_login']").click (oder .trigger('click'))

Wenn alles andere fehlschlägt, prüfen Sie in der Konsole, ob die Schaltfläche vorhanden ist: document.getElementById("btn_login")

2voto

Wenn Sie den Linktext kennen, können Sie page.find_link(text).click . ( Quelle )

1voto

Jorge Punkte 11

Versuchen Sie, ein save_and_open_page vor der betreffenden Zeile einzufügen. Dadurch sollten Sie die Seite und eventuelle Fehler, die das Anklicken verhindern, sehen können.

1voto

Gabriel C Punkte 263

Ich verwende Capybara mit Chrome

Capybara.register_driver :chrome do |app|   Capybara::Selenium::Driver.new(app, 
                                                           :browser => :chrome) 
end

Capybara.javascript_driver = :chrome

und installieren Sie den Chrome-Treiber:

brew install chromedriver

http://collectiveidea.com/blog/archives/2011/09/27/use-chrome-with-cucumber-capybara/

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