webentwicklung-frage-antwort-db.com.de

Kann Element nicht finden, auf das Sie mit Capybara + Rails3 klicken können

Hintergrund : Ich benutze Capybara mit Rspec, um eine Rails 3-App zu testen Treiber verwendet : Selen

Problem : Ich kann den "Anmelden" -Button nicht finden, um innerhalb meines Tests darauf zu klicken.

HTML Quelltext:

<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="/lms/forgot_password" class="btn">Forgot password...</a>
            <a href="#" class="btn close cancel" data-dismiss="modal">Cancel</a>
          </div>
        </fieldset>
</form>

Test fehlgeschlagen

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 => "[email protected]"
      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!

20
Deleteman

Bitte versuchen Sie das:

page.find("#btn_login").click
35
suresh.g

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

Ist die richtige Antwort.

click_on verwendet keinen CSS-Selektor, sondern den Text oder die ID eines Links. Sie möchten click_on("btn_login"). Kein Hash-Zeichen oder irgendetwas.

10
jnicklas

versuchen

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

Es sieht so aus, als würden Sie versuchen, einen Submit-Button in einem modalen CSS zu klicken. Sie müssen zuerst das aufrufen, was dieses modale Element anzeigt.

4
sirvine

Fügen Sie dem Gemfile "gem 'launchy" "hinzu und setzen Sie die Zeile " Save_and_open_page "vor die Zeile für eine fehlerhafte Zeile in der Schrittdatei.

VERWEIS: http://techiferous.com/2010/04/using-capybara-in-Rails-3/

4
jasnow

Ich denke nicht, dass click_on einen solchen Locator benötigt - ich denke, es will nur eine ID, einen Namen oder einen Wert. Versuchen Sie im Versuch, click_on ("input # btn_login") durch Folgendes zu ersetzen: 

page.find ('# btn_login'). Klicken Sie auf

3
ebeland
  • click_button ("Anmelden")
  • find (: xpath, "//*[@id='btn_login'*").click (oder .trigger (" click "))

Wenn dies nicht gelingt, gehen Sie durch die Konsole und prüfen, ob Sie das Vorhandensein der Schaltfläche überprüfen können: document.getElementById ("btn_login")

3
user2393426

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

2
Stefan Lance

Fügen Sie vor der betreffenden Zeile eine save_and_open_page hinzu. Auf diese Weise können Sie die Seite und alle Fehler anzeigen, die die Klickaktion verhindern können. 

1
Jorge

Ich benutze Capybara mit Chrom 

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

Capybara.javascript_driver = :chrome

und Chrome-Treiber installieren:

brew install chromedriver

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

1
Gabriel C