21

背景: Rspec で Capybara を使用して、Rails 3 アプリをテストしています。 使用ドライバー: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 => "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

私のテストファイルは中にありspec/requestsます。

何か案は?ありがとう!

4

10 に答える 10

35

これを試してください:

page.find("#btn_login").click
于 2012-12-10T14:10:52.600 に答える
10

これ: https://stackoverflow.com/a/11348065/1504796

正解です。

click_onCSS セレクターではなく、リンクのテキストまたは ID を取ります。あなたがしたいclick_on("btn_login")。ハッシュ記号などはありません。

于 2012-07-05T17:49:38.450 に答える
7

試す

find('#id',:visible => true).click
于 2013-06-10T09:30:06.677 に答える
4

いくつかのモーダルCSS内の送信ボタンをクリックしようとしているようです。最初にそのモーダル要素を表示するものを呼び出す必要があります。

于 2012-07-05T15:21:27.863 に答える
4

Gemfile に「gem 'launchy'」を追加し、ステップ ファイルの失敗した行の前に「save_and_open_page」行を追加してみてください。

参照: http://techiferous.com/2010/04/using-capybara-in-rails-3/

于 2012-07-05T14:40:14.153 に答える
3

click_on がそのようなロケーターを取るとは思いません。ID、名前、または値だけが必要な場合があると思います。実験として、click_on("input#btn_login") を次のように置き換えてみてください。

page.find('#btn_login').click

于 2012-07-05T15:52:34.093 に答える
3
  • click_button("サインイン")
  • find(:xpath, "//*[@id='btn_login']").click (または .trigger('click'))

他に失敗した場合は、コンソールを調べて、ボタンの存在を確認できるかどうかを確認してください: document.getElementById("btn_login")

于 2014-03-18T15:52:33.317 に答える
2

リンク テキストがわかっている場合は、 を使用できますpage.find_link(text).click。(ソース

于 2014-09-08T15:36:38.130 に答える
1

クロムでカピバラを使用します

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

Capybara.javascript_driver = :chrome

そしてchromeドライバーをインストールします:

brew install chromedriver

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

于 2015-01-16T02:04:31.043 に答える
1

問題の行の前に save_and_open_page を追加してみてください。これにより、ページと、クリック操作を妨げる可能性のあるエラーを確認できるようになります。

于 2012-07-05T14:42:04.583 に答える