カピバラで問題なく記入できる適切なラベルのあるフィールドがあります:
fill_in 'Your name', with: 'John'
入力する前に値を確認したいのですが、わかりません。
fill_in
次の行の後に追加した場合:
find_field('Your name').should have_content('John')
そのテストは失敗しますが、ページを保存することで確認したように、直前の入力は機能しました。
何が欠けていますか?
カピバラで問題なく記入できる適切なラベルのあるフィールドがあります:
fill_in 'Your name', with: 'John'
入力する前に値を確認したいのですが、わかりません。
fill_in
次の行の後に追加した場合:
find_field('Your name').should have_content('John')
そのテストは失敗しますが、ページを保存することで確認したように、直前の入力は機能しました。
何が欠けていますか?
回答:
xpathクエリを使用input
して、特定の値( 'John'など)の要素があるかどうかを確認できます。
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"
find_field
、その他Node::Finders
はノードを見つけて期待よりもアクションを実行するために使用されます。もちろん、これは規則ではありませんが、組み込みのソリューションを使用するのはより良いアイデアなので、単純なものにはこれを使用します。ただ言って!
別のかなりの解決策は次のとおりです。
page.should have_field('Your name', with: 'John')
または
expect(page).to have_field('Your name', with: 'John')
それぞれ。
参照も参照してください。
注:無効な入力の場合は、オプションを追加する必要がありますdisabled: true
。
with
確かに渡すと、値が一致した場合にのみtrueが返されました。
expected […] but there were no matches. Also found "", which matched the selector but not all filters..
が、今では非常に素晴らしいエラーメッセージに非常に近い空のフィールドが表示されます。
少し異なる方法を実行する方法を考えていました。フィールドに値があるかどうかをテストしたい(一致するまでマッチャーを再テストするカピバラの機能を利用しながら)。「フィルターブロック」を使用してこれを行うことが可能であることがわかります。
expect(page).to have_field("field_name") { |field|
field.value.present?
}
.value
少し欠けていました。ありがとう!