68

HTMLの場合

<select id="date">
  <option value="20120904">Tue 4 Sep 2012</option>
  <option value="20120905">Wed 5 Sep 2012</option>
  <option value="20120906">Thu 6 Sep 2012</option>
</select>

私は次のCapybaraRubyコードを持っています:

select "20120905", :from => "date"

しかし、このエラーは次のとおりです。

cannot select option, no option with text '20120905' in select box 'date' (Capybara::ElementNotFound)

しかし、私がそうするなら

select "Wed 5 Sep 2012", :from => "date"

大丈夫です。

テキストではなくでカピバラのオプションを選択することは可能ですか?

ありがとう

4

9 に答える 9

76

これは、値でオプションを選択するために機能します。

find("option[value='20120905']").click

セレクターのスコープを維持するには、次のようにブロック内でラップできます。

within '#date' do
  find("option[value='20120905']").click
end
于 2012-09-10T19:58:51.717 に答える
21

私はヘルパーメソッドを書きました:

def select_by_value(id, value)
  option_xpath = "//*[@id='#{id}']/option[@value='#{value}']"
  option = find(:xpath, option_xpath).text
  select(option, :from => id)
end

spec/support/の .rb ファイルに保存します。

使用例:

before do
  select_by_value 'some_field_id', 'value'
  click_button 'Submit'
end
于 2013-04-04T20:39:17.010 に答える
4

また、次のようにして達成することもできます。

find_by_id('date').find("option[value='20120905']").click
于 2013-02-27T14:27:46.063 に答える
3

このヘルパー メソッドは非常に巧妙です。少しだけ変更します。

def select_by_value(id, value)

  option_xpath = "//*[@id='#{id}']/option[@value='#{value}']"

  find(:xpath, option_xpath).click

end

あるいは単に:

find(:xpath, "//select[@id='date']/option[@value='20120904']").click
于 2014-09-24T21:35:56.017 に答える
1

私の場合、同じテキストのオプションがいくつかあります。これが、値による選択が必要な理由です。いくつかの回答を組み合わせて、私にとって最適な解決策を見つけました。

def select_by_value(id, 値)
  option_xpath = "//*[@id='#{id}']/option[@value='#{value}']"
  find(:xpath, option_xpath).select_option
終わり
于 2016-02-05T16:37:01.440 に答える
0

find_field を使用したクリックは正常に機能します。

find_field("date").find("option[value='20120905']").click
于 2014-09-10T10:56:15.007 に答える
0

最初にテキストと一致するように見え、次に値と一致するように見えるcapybara-uiを使用することもできます。

# define your form widget, in this case in a role
class UserRole < Capybara::UI::Role
  form :my_form do
    select :my_select, 'my_select'
  end
end

# then just submit your form params via #submit
role = UserRole.new

role.submit :my_form, my_select: '20120905'

capybara-ui フォームの詳細については、こちらを参照してください。

于 2016-01-22T16:22:53.703 に答える