2012-05-08 6 views
129

は、私は問題なくカピバラで埋めることができ、適切なラベルとフィールドを持っています。カピバラを使用してフォームフィールドが正しくプレフィックスされていることを確認するにはどうすればよいですか?私はそれを充填する前に、それが持っている値をチェックしたいのですが、それを把握することはできません</p> <pre><code>fill_in 'Your name', with: 'John' </code></pre> <p>:

私はfill_in後に次の行を追加する場合:私は、ページを保存することにより検証してきたように充填したばかりの前に働いていたものの、

find_field('Your name').should have_content('John') 

そのテストが失敗したが。

私には何が欠けていますか?

expect(page).to have_xpath("//input[@value='John']") 

は、詳細はhttp://www.w3schools.com/xpath/xpath_syntax.aspを参照してください:

答えて

159

あなたが特定の値(例えば「ジョン・」)とのinput要素がありますかどうかをチェックするためにXPathクエリを使用することができます。

expect(find_field('Your name').value).to eq 'John' 

EDIT:おそらくきれいな方法については

(!あなたがする必要があります)最近では、私はおそらく使用したいhave_selector

expect(page).to have_selector("input[value='John']") 

ページオブジェクトパターンを使用している場合

class MyPage < SitePrism::Page 
    element :my_field, "input#my_id" 

    def has_secret_value?(value) 
    my_field.value == value 
    end 
end 

my_page = MyPage.new 

expect(my_page).to have_secret_value "foo" 
+0

ああ、私は '.value'ビットが欠けていました。これを行うには、「フィルタブロック」を使用することが可能です。ありがとう! –

+0

私は同じ問題を抱えていましたが、フォームフィールドではなくdivを使用していました。同じ問題を抱える人は、find_field()。valueではなくfind_by_id()。textを使用してください。フォームフィールドでしか働かない価値があることを私に見せてくれました... –

+8

後者の問題は、Capybaraのポーリングサイクルを使用しないため、フィールドが長時間実行されるJSコードで設定されていると即座に失敗することです。静的に生成されたフォームでこれを試していない限り、最初の方法が優先されます。 – fqxp

258

さらにもう一つの解決策は、

です。
page.should have_field('Your name', with: 'John') 

または

expect(page).to have_field('Your name', with: 'John') 

それぞれ。

referenceも参照してください。

注::無効入力の場合は、disabled: trueオプションを追加する必要があります。

+15

選択した答えよりもはるかに優れています! – Agent47DarkSoul

+3

エラーメッセージに期待される文字列と実際の文字列が表示されるため、選択した答えがまだ好きです。これは、 "役に立たない"期待フィールド "私のフィールド"何かを返す "エラーを返します。しかし、これは間違いなく良く読まれ、ページ・マッチャーAPIの方が優れています。 Upvotesまわり! – mraaroncruz

+0

これは、フィールドの内容を確認するためにtypeahead.jsを使用しているときに、xpathマッチャーがしなかったときに役立ちました。 –

1

あなたは特別プレースホルダをテストしたい場合は、使用:

page.should have_field("some_field_name", placeholder: "Some Placeholder") 

か:

page.should have_field("some_field_name", with: "Some Entered Value") 
0

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder") 

あなたは、ユーザーが入力した値をテストする場合私は少し違ったやり方をしているのだろうかと疑問に思っていた。フィールドに値(Capybara's ability to re-test the matcher until it matchesを使用している間)。

expect(page).to have_field("field_name") { |field| 
    field.value.present? 
} 
関連する問題

 関連する問題