Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't find element to click on using Capybara + Rails3

Tags:

Background: I'm using Capybara with Rspec to test a Rails 3 app. Driver used: Selenium

Problem: I can't find the "Sign in" button in order to click on from within my test.

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

Failing 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 

My test file is inside spec/requests.

Any ideas? Thanks!

like image 665
Deleteman Avatar asked Jul 04 '12 20:07

Deleteman


2 Answers

Please try this:

page.find("#btn_login").click 
like image 150
suresh.g Avatar answered Oct 01 '22 03:10

suresh.g


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

Is the right answer.

click_on does not take a CSS selector, but instead the text or id of a link. You want click_on("btn_login"). No hash sign or anything.

like image 21
jnicklas Avatar answered Oct 01 '22 04:10

jnicklas