背景:RspecでCapybaraを使用してa Rails 3 app。Driver used:Seleniumをテストしています
問題:テスト内からクリックするための[サインイン]ボタンが見つかりません。
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>
不合格テスト
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
私のテストファイルはspec/requests
。
何か案は?ありがとう!
これを試してください:
page.find("#btn_login").click
これ: https://stackoverflow.com/a/11348065/1504796
正解です。
_click_on
_はCSSセレクターではなく、リンクのテキストまたはIDを取ります。 click_on("btn_login")
が必要です。ハッシュ記号などはありません。
試す
find('#id',:visible => true).click
いくつかのモーダルCSS内の送信ボタンをクリックしようとしているようです。まず、モーダル要素を表示するものを呼び出す必要があります。
Gemfileに「gem 'launchy'」を追加して、ステップファイルの失敗した行の前に「save_and_open_page」行を挿入してみてください。
参照: http://techiferous.com/2010/04/using-capybara-in-Rails-3/
Click_onがそのようなロケーターをとるとは思いません-ID、名前、または値だけが必要な場合があると思います。実験として、click_on( "input#btn_login")を次のものに置き換えてみてください。
page.find( '#btn_login')。click
それ以外の場合は、コンソールを使用して、ボタンの存在を確認できるかどうかを確認します。document.getElementById( "btn_login")
リンクテキストがわかっている場合は、page.find_link(text).click
を使用できます。 ( ソース )
問題の行の前にsave_and_open_pageを追加してみてください。これにより、ページと、クリック操作を妨げる可能性のあるエラーを確認できます。
カピバラとクロームを使っています
Capybara.register_driver :chrome do |app| Capybara::Selenium::Driver.new(app,
:browser => :chrome)
end
Capybara.javascript_driver = :chrome
chrome driver:
brew install chromedriver
http://collectiveidea.com/blog/archives/2011/09/27/use-chrome-with-cucumber-capybara/