2016-11-09 77 views
3

我使用JS水豚与selenium-webdriver为我的功能测试。Rspec:水豚选择不工作

我想从选择框中

这里选择一个品牌是我的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_inchooseclick_button正在...我在视图中使用collection_select ...是造成这个问题?

enter image description here

+0

您是否可以更具体地了解不工作? –

+0

从':campaign_brand_id''做'select @ brand.name时得到的错误究竟是什么? –

回答

1

我想你几乎使用XPath知道答案,但是我会尽量避免它,由于它怎么脆即可。

我用下面的代码,但最近我只跟01​​运行我的测试,而不是硒:

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

我用文字作为选择,因为对我来说,这是用户所看到的和因此是功能测试应该寻找的。 另外,我使用了一个正则表达式来匹配文本,使其不区分大小写 - 这是为了防止由于变化的UI更改(如上/下文字框)导致的失败测试。它还可以帮助您摆脱与文本的显示与实际情况混杂的css text-transform的尴尬问题。


更新

如果问题仍然持续,您将不得不做一些调试。我的建议是pry debugger宝石。将其添加到您的gemfile中,并在失败的行上面的方案中包含行binding.pry。 如果我没有记错,硒只在前台运行,所以你可以在看页面的时候使用交互式的pry控制台。

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

如果您还没有运气好的话,也许这些问题将有所帮助:

  • 是否有任何错误或它静静地
  • 未能有任何自定义的JS/CSS修改您的选择框?
  • 尝试通过execute_script与网页互动(见selenium driver docs了解详细信息)
+0

仍然我得到相同的错误...其他capybara命令像fill_in,选择,click_button工作正常...无法理解与选择的问题???新增了ScreenShot .... –

0

使用选择不带括号:

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

select @brand.name, from: 'campaign_brand_id' 

可以使用编号或名称选项from

但如果您的表单已定制且实际选择已隐藏,则您必须使用另一个案例