【问题标题】:Unable to click bootstrap modal dialog buttons using Poltergeist无法使用 Poltergeist 单击引导模式对话框按钮
【发布时间】:2015-02-06 01:57:37
【问题描述】:

当我单击一个按钮时,会显示一个引导模式弹出窗口。我尝试使用如下 Poltergeist 功能单击“确定”或“取消”按钮,但没有任何效果。要么功能不起作用,要么在外面点击。

<div class="modal-footer">
<a class="btn cancel" data-dismiss="modal" href="#">Cancel</a>
<a class="btn proceed btn-primary" href="#">OK</a>
</div>

click_link "Release"
page.driver.render('ReleaseOKCANCEL.jpg', :full =>true)

点击“释放”后,将出现一个带有确定和取消按钮的引导模式,可以通过屏幕截图进行验证。尝试使用以下命令单击“确定”按钮。

  1. page.find('.btn.proceed.btn-primary').trigger('click')
  2. click_link('OK')
  3. page.execute_script('$(".btn.proceed.btn-primary").trigger("click")')
  4. page.execute_script('$(".btn.proceed.btn-primary").trigger("hover").trigger("cli‌​ck")')
  5. page.all(".//*[@id='confirmation_dialog']/div[3]/a[2]").first.click
  6. click_button“确定”
  7. 点击“确定”
  8. page.dismiss_confirm 做 page.find('.btn.proceed.btn-primary').click end
  9. page.find('.modal').find('.modal-footer').find('.btn.proceed.btn-primary').trigg‌​er('click')

但是没有任何效果。单击“确定”按钮后,应用程序中的状态将发生变化。但这不会发生。

【问题讨论】:

  • 1) page.find('.modal').find('.modal-footer').find('.btn.proceed.btn-primary').trigger('click') 2) page.find('.btn.proceed.btn-primary').trigger('click') 3) click_link('OK') 4) page.execute_script('$(".btn.proceed.btn-primary ").trigger("click")') 5) page.execute_script('$(".btn.proceed.btn-primary").trigger("hover").trigger("click")') 6) 页面.all(".//*[@id='confirmation_dialog']/div[3]/a[2]").first.click 7) click_button "OK" 8) click_on "OK" 9) page.dismiss_confirm 做page.find('.btn.proceed.btn-primary').click end
  • 版本 - Poltergeist - 1.5.1 Capybara- 2.4.4 Ruby - 1.9.3 我正在通过 rspec “带路径的文件名”运行
  • 你确定你真的能找到这些元素吗?我遇到了类似的问题,结果发现模态的 div 的深层堆栈位于 iframe 中,这是另一个 DOM 上下文(这样说)
  • 可见,我可以通过 page.driver.render(@screenshotLoc + 'page.jpg', :full =>true) 看到它
  • 这不是我问的,你能通过 jquery 选择器访问它吗?

标签: rspec capybara poltergeist


【解决方案1】:

过去几周我一直在编写一堆功能/集成规范 - 并且一直针对引导模式中的许多字段和按钮(尽管类名称已从引导默认值更改)。

这里有一个对我来说非常有用的测试,它带有一个普通的引导模式:

 it "displays edit profile page pre-filled for editing after successful form submission" do
    click_link "List a Property"

    within("form#new_user") do
      fill_in "user[login]", with: user.username
      fill_in "user[password]", with: user.password
      fill_in "user[email]", with: user.email
      fill_in "user[first_name]", with: user.first_name
      fill_in "user[last_name]", with: user.last_name
      fill_in "user[phone_number]", with: user.phone_number
      click_button "List My Properties"
    end

    expect(current_path).to eq account_path(:profile)
    within(".profile-name") { expect(page).to have_content user.username }
    find_field("user[first_name]").value.should eq user.first_name
  end

在 Capybara 中使用 inside( ) 方法通常可以节省很多我本来会遇到的定位问题。

我还应该注意,所有测试都通过以下行启用了 js:

describe "User", js: :true do

【讨论】:

    【解决方案2】:

    我能够在 Bootstrap 模式上单击元素的唯一方法是

    execute_script("document.querySelector('.multiselect__tags').click()")
    

    querySelector 选择元素的位置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2015-08-10
      • 2019-10-25
      • 2022-10-16
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多