web-dev-qa-db-ja.com

Capybara save_and_open_pageは、ラジオボタンのテートを反映していません

フリーランサーのラジオボタンを選択しようとしています。コードは次のとおりです(ブラウザーで要素を検査する場合)

<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")

これはエラーにはなりませんが、カピバラでページを保存して開くと、フリーランサーに対してラジオボックスが選択されません。 xpathchooseを使用して例を挙げていただければ幸いです。

9
Kanwar Baweja

あなたが抱えている可能性が最も高い本当の問題は、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
17
Thomas Walpole