web-dev-qa-db-ja.com

カピバラ:テキストではなく値でオプションを選択

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>

私は次のカピバラを持っていますRubyコード:

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"

大丈夫です。

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

ありがとう

64
Paul

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

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

セレクターのスコープを維持するには、それをブロック内でラップすることができます:

within '#date' do
  find("option[value='20120905']").click
end
70
robynhenderson

Poltergeistをドライバーとして使用すると、上記の他のオプションのいくつかで提案されているようなオプションをクリックすることができず、代わりに次のことができます。

page.find_by_id('date').find("option[value='20120905']").select_option

39
Mark

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

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
20
d_rail

また、次のことを実行することでも実現できます。

find_by_id('date').find("option[value='20120905']").click
4
TrashyMcTrash

そのヘルパーメソッドはかなり賢いです。少し変更します。

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
3
GeneK

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

 def select_by_value(id、value)
 option_xpath = "// * [@ id = '#{id}']/option [@value = '#{value}']" 
 find(:xpath、option_xpath).select_option 
 end 
1
iRet

Find_fieldを使用してクリックすると正常に機能します。

find_field("date").find("option[value='20120905']").click
0
cage

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フォームの詳細を参照してください here

0
steel