gpt4 book ai didi

ruby-on-rails - Rspec: capybara 选择不工作

转载 作者:行者123 更新时间:2023-12-04 06:22:00 29 4
gpt4 key购买 nike

我正在使用支持 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

其他 capybara 命令,如 fill_in choose click_button正在工作...我正在使用 collection_select 在 View 中......是否导致了这个问题?

enter image description here

最佳答案

我想你几乎用 xpath 就已经有了它,但我尽量避免它,因为它是多么脆弱。
我使用以下代码,但最近我只使用 capybara-webkit 运行我的测试而不是 Selenium :

option = @brand.name
find('#campaign_brand_id').find(
'option', text: /#{option}/i).select_option
我使用文本作为选择器,对我来说这是用户看到的,因此是功能测试应该寻找的。
此外,我使用了正则表达式来匹配文本以使其不区分大小写 - 这是为了防止由于变化无常的 UI 更改(例如单词的上下大小写)而导致测试失败。也让你免于css的尴尬问题 text-transform弄乱了文本的显示与实际情况。

更新
如果问题仍然存在,您将不得不进行一些调试。我的建议是 pry debugger gem 。将它添加到您的 gemfile 并包含行 binding.pry在失败的行上方的场景中。
如果我没记错的话,selenium 仅在前台运行,因此您可以在查看页面时使用交互式 pry 控制台。
首先尝试找到选择框 ( find('#campaign_brand_id') ) 及其选项,然后查看 selenium 浏览器在您运行命令时执行的操作。
如果你仍然没有任何运气,也许这些问题会有所帮助:
  • 是否有任何错误或是否无声无息地失败
  • 是否有任何自定义 JS/CSS 修改您的选择框?
  • 尝试通过 execute_script 与页面交互(详见 selenium driver docs)
  • 关于ruby-on-rails - Rspec: capybara 选择不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505787/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com