水豚:按值选择一个选项而不是文本

Pau*_*aul 64 ruby capybara

对于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>
Run Code Online (Sandbox Code Playgroud)

我有以下Capybara Ruby代码:

select "20120905", :from => "date"
Run Code Online (Sandbox Code Playgroud)

但是这个错误有:

cannot select option, no option with text '20120905' in select box 'date' (Capybara::ElementNotFound)
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做

select "Wed 5 Sep 2012", :from => "date"
Run Code Online (Sandbox Code Playgroud)

没关系.

是否可以通过Value not Text选择Capybara中的选项?

谢谢

rob*_*son 72

这将按值选择一个选项:

find("option[value='20120905']").click
Run Code Online (Sandbox Code Playgroud)

要维护选择器的范围,可以将其包装在内部块中,如下所示:

within '#date' do
  find("option[value='20120905']").click
end
Run Code Online (Sandbox Code Playgroud)

  • 从Selenium切换到Poltergeist后发现这种方法不起作用.因此取而代之的是find('#select_id').find('option [value ="1"]').select_option对不起英语不好. (22认同)

小智 39

使用Poltergeist作为驱动程序,我无法单击上面某些其他选项中建议的选项,而是可以执行以下操作:

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

  • `click`导致我`您尝试与之交互的元素要么不是DOM的一部分,要么当前在页面上不可见`但是`select_option`对我来说很好.谢谢! (3认同)

d_r*_*ail 20

我写了一个帮助方法:

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

保存在spec/support /中的.rb文件中

使用示例:

before do
  select_by_value 'some_field_id', 'value'
  click_button 'Submit'
end
Run Code Online (Sandbox Code Playgroud)