Rspec:Capybara选择不工作

时间:2016-11-09 11:21:34

标签: ruby-on-rails selenium ruby-on-rails-4 rspec capybara

我正在使用JS启用的Capybara和selenium-webdriver进行功能测试。

我想从选择框中选择一个品牌

这是我的HTML

<select id="campaign_brand_id" name="campaign[brand_id]" class="form-control">
  <option value="">Choose a Brand</option>
  <option value="1">Brand1</option>
  <option value="2">Brand2</option>
</select>

这是我的测试代码

before(:each) do
  @brand = FactoryGirl.create(:brand, name: 'Brand1', company: member.company)
end

scenario 'Create a new campaign - with minimum valid data', js: true do
  visit new_brands_campaign_url(host: "skreem.dev", port: Capybara.current_session.server.port)

  select (@brand.name), from: 'campaign_brand_id'
  click_button 'Create Campaign'
end

我也试过以下......

1. select (@brand.name), from: 'campaign[brand_id]'
2. select (@brand.id), from: 'campaign_brand_id'
3. find('#campaign_brand_id').find(:xpath, "option[#{@brand.id}]").select_option
4. within '#campaign_brand_id' do
     find("option[value='1']").click
   end

fill_in choose click_button等其他水豚命令正在运作......我在视图中使用 collection_select ...是导致这个问题?

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为你差不多用xpath了,但我试着避免它因为它有多么脆弱。

我使用以下代码,但最近我只使用capybara-webkit而不是selenium运行我的测试:

option = @brand.name
find('#campaign_brand_id').find(
  'option', text: /#{option}/i).select_option

我使用文本作为选择器,对我而言,这是用户看到的内容,因此是功能测试应该寻找的内容。 此外,我使用正则表达式来匹配文本,使其不区分大小写 - 这是为了防止由于变化的UI变化(如单词的上/下框)而导致测试失败。它还可以避免css text-transform弄乱文本显示与实际情况的尴尬问题。

更新

如果问题仍然存在,则必须进行一些调试。我的建议是pry debugger宝石。将它添加到您的gemfile中,并在失败的行上方的场景中包含行binding.pry。 如果我没记错的话,selenium只在前台运行,因此您可以在查看页面时使用交互式pry控制台。

首先尝试找到选择框(find('#campaign_brand_id'))及其选项,然后查看运行命令时selenium浏览器的功能。

如果你还没有运气,也许这些问题会有所帮助:

  • 是否有任何错误或是否无声地失败
  • 是否有任何自定义JS / CSS修改您的选择框?
  • 尝试通过execute_script与网页互动(详情请参阅selenium driver docs

答案 1 :(得分:0)

使用不带括号的选择:

select @brand.name, from: 'campaign[brand_id]'

select @brand.name, from: 'campaign_brand_id'

您可以使用选项from

的ID或名称

但如果隐藏了自定义和真实选择的表单,则必须使用其他案例