我正在使用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
...是导致这个问题?
答案 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浏览器的功能。
如果你还没有运气,也许这些问题会有所帮助:
execute_script
与网页互动(详情请参阅selenium driver docs)答案 1 :(得分:0)
使用不带括号的选择:
select @brand.name, from: 'campaign[brand_id]'
或
select @brand.name, from: 'campaign_brand_id'
您可以使用选项from
但如果隐藏了自定义和真实选择的表单,则必须使用其他案例