Contexte : J'utilise Capybara avec Rspec pour tester une application Rails 3 Pilote utilisé : Selenium
Problème : Je ne trouve pas le bouton "Connexion" pour pouvoir cliquer sur depuis mon test.
Code HTML:
<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>
Échec du 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 => "[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
Mon fichier de test est à l'intérieur de spec/requests
.
Des idées? Merci!
S'il vous plaît essayez ceci:
page.find("#btn_login").click
Ceci: https://stackoverflow.com/a/11348065/1504796
Est la bonne réponse.
click_on
ne prend pas de sélecteur CSS, mais plutôt le texte ou l'identifiant d'un lien. Vous voulez click_on("btn_login")
. Aucun signe de hachage ou quoi que ce soit.
essayer
find('#id',:visible => true).click
On dirait que vous essayez de cliquer sur un bouton d'envoi dans certains fichiers CSS modaux. Vous aurez besoin d'invoquer tout ce qui affiche cet élément modal en premier.
Essayez d’ajouter "gem 'launchy" à votre fichier Gemfile et mettez la ligne "Save_and_open_page" avant la ligne ayant échoué dans le fichier step.
RÉFÉRENCE: http://techiferous.com/2010/04/using-capybara-in-Rails-3/
Je ne pense pas que click_on prendra un localisateur comme celui-ci - je pense qu'il peut vouloir juste un identifiant, un nom ou une valeur. A titre expérimental, essayez de remplacer click_on ("input # btn_login") par:
page.find ('# btn_login'). cliquez sur
Sinon, allez dans la console et voyez si vous pouvez vérifier la présence du bouton: document.getElementById ("btn_login")
Si vous connaissez le texte du lien, vous pouvez utiliser page.find_link(text).click
. ( la source )
Essayez d’ajouter une page save_and_open_page avant la ligne en question. Cela devrait vous permettre de voir la page et toutes les erreurs susceptibles d'empêcher l'action de cliquer.
J'utilise capybara avec chrome
Capybara.register_driver :chrome do |app| Capybara::Selenium::Driver.new(app,
:browser => :chrome)
end
Capybara.javascript_driver = :chrome
et installez le pilote chrome:
brew install chromedriver
http://collectiveidea.com/blog/archives/2011/09/27/use-chrome-with-cucumber-capybara/