フリーランサーのラジオボタンを選択しようとしています。コードは次のとおりです(ブラウザーで要素を検査する場合)
<label for="registration_payer_type_business"><input checked="checked" id="registration_payer_type_business" name="registration[payer_type]" type="radio" value="business">
Company
</label>
<label for="registration_payer_type_freelancer"><input id="registration_payer_type_freelancer" name="registration[payer_type]" type="radio" value="freelancer">
Freelancer
</label>
私が試してみました
page.choose("registration_payer_type_freelancer")
これはエラーにはなりませんが、カピバラでページを保存して開くと、フリーランサーに対してラジオボックスが選択されません。 xpathとchooseを使用して例を挙げていただければ幸いです。
あなたが抱えている可能性が最も高い本当の問題は、save_and_open_page
が現在のプロパティ値ではなく現在の属性値でHTMLを保存することです。これは、ラジオボタンを選択したという事実を意味します(属性値ではなく、チェックされたプロパティ値を変更するものは、必ずしも表示されません)。ページの現在の状態を確認したい場合は、save_and_open_screenshot
を使用することをお勧めします。以下に述べているのは、ラジオボタンを選択する方法です。
Capybaraで特定のラジオボタンを選択するには、必要に応じてID、名前、ラベルテキスト、および値を使用して、一意にすることができます(たとえば名前を使用)
choose('registration_payer_type_freelancer') # id
choose('registration[payer_type]', option: 'freelancer') # name and value to make unique
choose('Freelancer') # label text
choose(option: 'freelancer') # just value if the only radio button with that value
これらすべての場合において、実際のラジオボタン入力要素がページ上で非表示(スタイリング目的など)であり、代わりに表示ラベルをクリックする場合は、allow_label_click: true
を渡すことができます。
choose('registration_payer_type_freelancer', allow_label_click: true) # find by id and select by clicking the label if input is non-visible
使用できる他のオプションは、CSSで検索することです(デフォルトのセレクタータイプがデフォルトの:cssの場合、:css引数は無視できます)
find(:css, '#registration_payer_type_freelancer').click
XPathクエリを使用して要素を見つけることもできますが、98%の確率で実際には必要ありません(CSSを正しく理解している人が多く、ファインダーのスコープを使用すると、通常、任意の要素を取得するために使用できます)。認識している- https://github.com/teamcapybara/capybara/blob/master/README.md#beware-the-xpath--trap
find(:xpath, './/input[@value="freelancer"]').click