通过Capybara(v2)与Bootstrap模态交互时出现问题

bvn4nwqk  于 2024-01-04  发布在  Bootstrap
关注(0)|答案(4)|浏览(269)

在一个Rails应用程序中,我试图使用带有capybara-webkit驱动程序的Capybara在Rspec中测试带有jQuery TokenInput field的Bootstrap模型。有问题的部分如下:

  1. click_link 'Create Team Modal'
  2. sleep 1
  3. within('div#modal_popup') do
  4. fill_in 'input#token-input-team_name', with: 'Fancy team name'
  5. sleep 1
  6. fill_in 'input#token-input-team_name', with: '\t'
  7. sleep 1
  8. click_button 'Create Team'
  9. end
  10. page.should have_content('Fancy team name')

字符串

  • 点击按钮获取模态
  • 在TokenInput中填写团队名称
  • 模拟按Tab键以选中它
  • 创建团队
  • 验证名称是否显示在页面上

这将只适用于所有这些sleep 1的地方;否则Capybara崩溃在have_content,最终导致服务器错误,因为团队名称永远无法正确选择。其他Bootstrap modals * 没有 * TokenInput字段在加载之前不需要sleep 1
说了这么多,有没有办法摆脱睡眠,让这一切正常进行?水豚2拿出wait_until(有很好的理由)因为它会在默认的等待时间内等待测试某些东西.但这似乎没有反映在我上面的测试中;这就好像水豚在进入/退出这个模式时并不参与等待期。有人对此有任何经验吗?使用Rails 3.2.10,Rspec 2.12,Capybara 2,capybara-webkit 0.14.0,TokenInput 1.6.

7fhtutme

7fhtutme1#

尝试在测试环境layouts/application.html.erb中禁用动画

  1. <% if Rails.env.test? %>
  2. <style type="text/css">
  3. .modal.fade, .fade {
  4. -webkit-transition: opacity 0.01s;
  5. -moz-transition: opacity 0.01s;
  6. -ms-transition: opacity 0.01s;
  7. -o-transition: opacity 0.01s;
  8. transition: opacity 0.01s;
  9. }
  10. </style>
  11. <%end%>

字符串

vmjh9lq9

vmjh9lq92#

我建议在你的测试环境中添加以下css:

  1. div, a, span, footer, header {
  2. -webkit-transition: none !important;
  3. -moz-transition: none !important;
  4. -ms-transition: none !important;
  5. -o-transition: none !important;
  6. transition: none !important;
  7. }
  8. .modal {
  9. display: none !important;
  10. }
  11. .modal.in {
  12. display: block !important;
  13. }
  14. .modal-backdrop {
  15. display: none !important;
  16. }

字符串
在body的and中添加以下js:

  1. $(".fade").removeClass("fade");


这已经解决了我与水豚和靴带的大部分问题。

展开查看全部
l2osamch

l2osamch3#

我们只是这样做,它似乎工作(例如点击$('.tp-header-login'):

  1. # instead of find(".tp-header-login")
  2. find(".tp-header-login") # still do the find so you are sure its loaded then...
  3. execute_script "$('.tp-header-login').click()"

字符串

z9ju0rcb

z9ju0rcb4#

对于那些希望避免Rails.env.___? hack * 的人来说,下面的 * 似乎可以避免在基于Bootstrap的模型上测试jQuery UI drag-and-drop functionality时出现的问题。
首先,我们已经在 “等待” 模态的出现,使用一个像这样的帮助方法:

  1. def wait_for_modal_to_appear
  2. modal = wait_until {
  3. # Look for the modal by ID/whatever...
  4. }
  5. raise Capybara::ModalNotFound.new('...') if modal.nil?
  6. return modal
  7. end

字符串
然而,当我们尝试在该模式中拖放元素时,仍然会遇到虚假的问题。下面的代码添加,添加在return行之前,* 似乎 * 已经完成了任务:

  1. page.execute_script("document.getElementById('#{modal[:id]}').classList.remove('fade');")

  • 最近,我工作的一家公司就发生了这样的黑客攻击,导致需要紧急部署..
展开查看全部

相关问题