2012-03-06 5 views
4

Capybaraにログインフィールドの値を入力させることができません。私はCapybaraは私のログインフィールドを埋めることはありません

print page.html 

を使用して、ページの内容を印刷するとき、私は

1) the login process signs me in 
    Failure/Error: fill_in 'user_username', :with => 'Admin' 
    Capybara::ElementNotFound: 
    no text field, text area or password field with id, name, or label 'user_username' found 
    # (eval):2:in `fill_in' 
    # ./spec/integration/login_spec.rb:7:in `block (2 levels) in <top (required)>' 

しかし:ここで私がテストを実行すると、それが次のエラーで失敗しlogin_spec.rb

require 'spec_helper' 

describe "the login process" do 
    it "signs me in" do 
    visit '/login'  
    fill_in 'user_username', :with => 'Admin' 
    fill_in 'user_password', :with => 'Password' 
    end 
end 

です要素IDが正しいことがはっきりと分かります

<h2>Already Have an Account?</h2> 
<form accept-charset="UTF-8" action="/login" id="sidebar_login" method="post"> 
<div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="DccrBxhdS7WTAM/iEd08L4z9zt8MjBKTxQ0s6lMVIAA="> 
</div> 
<div class="form"></div> 
<div class="login_form_widget"> 
Username 
<div class="inputdiv_widget"> 
    <input class="textfield" id="user_username" name="user[username]" type="text"> 
</div> 
Password 
<div class="inputdiv_widget"> 
    <input class="textfield" id="user_password" name="user[password]" type="password"> 
</div> 

私は要素のID(user_username)と名前(user [username])を使用してみましたが、すべて同じ結果が得られました。私がここで紛失しているものはありますか?

使用
<label for="user_username">Username</label> 

とあなたの仕様で:

within ".login_form_widget" do 
    fill_in 'Username', :with => 'Admin' 
end 

はラベルが特に役に立ったが、それ以外、私はに何かを見ていないあなたのようなラベルを追加しようとした場合、どのよう

答えて

6

上記の構文を使用しています。

+0

私は実際にすでに同じ結果を試しています。同じページに2回表示されるログインフォームが原因で問題が発生する可能性はありますか?ログインページにアクセスすると、通常のログインフォームが表示されますが、ヘッダーには1つも表示され、ユーザーは任意のページにログインできます。それが問題なのでしょうか? – Ken

+1

問題のあるIDでターゲット設定する場合。実際には、同じページに同じIDを2度表示しないでください。これが当てはまる場合、あなたの仕様では、特定のログインフィールドをターゲットにするために 'within'セレクタのブロックでfill_inのものをラップすることができます。回答 –

+0

で更新されました。ログインページの要素IDは、ヘッダーのログインフォームと同じです。それがどうやって私を渡したのか。 withinブロックを使用するとID名を修正する間に一時的にこの問題を修正しました。ご協力いただきありがとうございます! – Ken

関連する問題