Капибара: выберите опцию по значению не текст
для 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>
у меня есть следующий код Capybara 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"
все в порядке.
можно ли выбрать опцию в капибаре по стоимостью не текст?
спасибо
8 ответов:
это будет работать, чтобы выбрать опцию по значению:
find("option[value='20120905']").click
чтобы сохранить область селектора, вы можете обернуть его в блок внутри как таковой:
within '#date' do find("option[value='20120905']").click end
с полтергейстом в качестве драйвера я не могу нажать на опцию, как предложено в некоторых других вариантах выше, вместо этого вы можете сделать следующее:
page.find_by_id('date').find("option[value='20120905']").select_option
Я написал вспомогательный метод:
def select_by_value(id, value) option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" option = find(:xpath, option_xpath).text select(option, :from => id) end
сохранить в a .файл РБ в spec / support/
пример использования:
before do select_by_value 'some_field_id', 'value' click_button 'Submit' end
вы можете добиться этого, выполнив следующие действия:
find_by_id('date').find("option[value='20120905']").click
этот вспомогательный метод довольно умный. Я бы его немного изменил:
def select_by_value(id, value) option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" find(:xpath, option_xpath).click
конец
или так:
find(:xpath, "//select[@id='date']/option[@value='20120904']").click
в моем случае у меня есть несколько вариантов с одинаковым текстом, поэтому мне нужно выбрать по значению. Объединив несколько ответов вместе я нашел лучшее решение для меня:
def select_by_value(id, value) option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" find(:xpath, option_xpath).select_option end
нажмите с помощью find_field отлично работает:
find_field("date").find("option[value='20120905']").click
вы также можете использовать капибара-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 forms здесь.