1. ホーム
  2. ruby

[解決済み] Capybaraを使ったドロップダウンでのオプションの選択方法

2022-02-18 13:55:40

質問

Capybara (2.1.0) を使ってドロップダウンメニューから項目を選択しようとしています。

番号で選択したい(2番目、3番目などの選択肢を選ぶという意味)。

いろいろとググってみたのですが、うまくいきません。

値で選択できました。

 find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click

しかし、私はその方法を使いたくありません。なぜなら、値は変化するものであり、私のテストはもろくなるからです。

ドロップダウンのHTMLは

<td class="value">
    <select name="organizationSelect" id="organizationSelect" class="required">
     <option value="NULL">Choose...</option>
     <option value="4c430d62-f1ba-474f-8e8a-4452c55ea0a8">&nbsp;Institution1</option>
     <option value="e1a4efa7-352d-410a-957e-35c8a3b92944">&nbsp;Institution / test</option>
    </select>
</td>

こんなこともやってみました。

  option = find(:xpath, "//*[@id='organizationSelect']/option[2]").text  
  select(option, :from => organizationSelect)

しかし、このようなエラーになります。

Ambiguous match, found 2 elements matching option "Institution" (Capybara::Ambiguous)

では、ドロップダウンから1番目、2番目、3番目などのオプションを選択するにはどうすればよいのでしょうか(Capybaraを使用して)?

どのように解決するのですか?

を見てみると のソースは select メソッド を渡すとどうなるかがわかります。 from のキーは、基本的に

find(:select, from, options).find(:option, value, options).select_option

つまり <select> を検索し、次に <option> を呼び出し、その中で select_option の上で <option> ノードになります。

最初の2つはすでにほとんどできているので、それらを並べ替えるだけです。それから select_option メソッドを最後に追加しました。

find('#organizationSelect').find(:xpath, 'option[2]').select_option