問題なくカピバラで入力できる適切なラベルのフィールドがあります:
fill_in 'Your name', with: 'John'
記入する前に値を確認したいのですが、わかりません。
fill_in
の後に次の行を追加した場合:
find_field('Your name').should have_content('John')
このテストは失敗しますが、ページを保存することで確認したとおり、直前の塗りつぶしは機能していました。
私は何が欠けていますか?
xpath queryを使用して、特定の値(例: 'John')を持つinput
要素があるかどうかを確認できます。
expect(page).to have_xpath("//input[@value='John']")
詳細については、 http://www.w3schools.com/xpath/xpath_syntax.asp を参照してください。
おそらくもっときれいな方法:
expect(find_field('Your name').value).to eq 'John'
編集:最近はおそらく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"
別のきれいな解決策は次のとおりです。
page.should have_field('Your name', with: 'John')
または
expect(page).to have_field('Your name', with: 'John')
それぞれ。
reference も参照してください。
注:無効な入力の場合、オプションdisabled: true
を追加する必要があります。
プレースホルダーをテストする場合は、次を使用します。
page.should have_field("some_field_name", placeholder: "Some Placeholder")
または:
expect(page).to have_field("some_field_name", placeholder: "Some Placeholder")
ユーザーが入力した値をテストする場合:
page.should have_field("some_field_name", with: "Some Entered Value")
私は少し違うことをする方法を疑問に思っていました:フィールドにsome値があるかどうかをテストしたかった( Capybaraの能力を利用しながら一致するまでマッチャーを再テストします )。これを行うために「フィルターブロック」を使用することが可能であることがわかります。
expect(page).to have_field("field_name") { |field|
field.value.present?
}