Capybara::Poltergeist::MouseEventFailed。 Poltergeist 检测到另一个元素
Capybara::Poltergeist::MouseEventFailed. Poltergeist detected another element
我正在使用水豚测试我的按钮点击功能。
require 'spec_helper'
describe 'journals edition', js: true do
let(:update_button) { find('[name="commit"][value="Update"]') }
describe 'redirection after update' do
describe 'articles' do
before :each do
@journal = Journal.create(jid: '1')
end
it 'should redirect to detail' do
visit dashboard_journal_path @journal
update_button.trigger(:click)
current_path.should eq dashboard_journals_path
end
end
end
end
当我从视图中删除名称为 class 'rights_link' 的 div 时,我没有收到错误
Failure/Error: update_button.click
Capybara::Poltergeist::MouseEventFailed:
Firing a click at co-ordinates [45, 751] failed. Poltergeist detected another element with CSS selector 'html body footer div#footer div#login_info a' at this position. It may be overlapping the element you are trying to interact with. If you don't care about overlapping elements, try using node.trigger('click').
# ./spec/features/journals/journal_edition_spec.rb:17:in `block (4 levels) in <top (required)>'
这是我的视图文件
h2 Journal #{@journal.id}
= errors_for @journal
div.show
= form_for [:dashboard, @journal] do |f|
div
strong ID:
br
= @journal.id
div
strong JID:
br
= @journal.jid
div
strong Abbreviation:
br
= f.text_field :abbreviation, size: '25%'
div
strong Name:
br
= f.text_field :name, size: '25%'
div
strong Free Access:
br
= f.check_box :free_access
div
strong Static Cover Image:
br
= f.check_box :static_cover_images, class: 'static_cover_image_enable'
div class='static_cover_image'
- if @journal.cover_image.exists?
= image_tag @journal.cover_image.url(:thumbnail)
br
italic Replace static cover image:
br
= f.file_field :cover_image, as: :file
- else
= f.file_field :cover_image, as: :file
**div class='rights_link'
strong Rights Link
br
= f.check_box :rights_link_enabled, class: 'rights_link_enable'**
div class='rights_link_type'
strong Rights Link Type:
br
- if @journal.rights_link_type == 'permission_direct'
= radio_button_tag :rights_link_type, 'rights_link'
| Rights Link
= radio_button_tag :rights_link_type, 'permission_direct', true
| Permission Direct
- else
= radio_button_tag :rights_link_type, 'rights_link', true
| Rights Link
= radio_button_tag :rights_link_type, 'permission_direct'
| Permission Direct
div class='rights_link_template'
strong Rights Link URL Template:
br
= f.text_area :rights_link_template, class: 'rights_link_template', size: '50%'
div class='issn'
strong ISSN
br
= f.text_field :issn, size: '25%'
div class='rights_holder_name'
strong Rights Holder Name
br
= f.text_field :rights_holder_name, size: '25%'
div
strong Exclude From All Articles:
br
= f.check_box :exclude_from_all_articles
div
strong Enabled:
br
= check_box_tag 'journal[enabled]', 1, @journal.disabled_at ? false : true
div
strong Updated At:
br
= display_local_time @journal.updated_at
div
strong Min iOS Version:
br
= f.text_field :ios_min_version, size: '25%'
div
strong Min Android Version:
br
= f.text_field :android_min_version, size: '25%'
= f.submit "Update"
= link_to 'Back', dashboard_journals_path
请提供解决方案。
我尝试使用
update_button.trigger(:click)
但没有帮助。请注意:'rights_link' div 之前的 div 在某些情况下被隐藏和显示。
首先,如果您正在测试应用程序,请不要使用 #trigger
。建议使用 #trigger
的错误消息的重要部分是 "If you don't care about overlapping elements"。在测试应用程序时,您应该小心,否则您将允许测试执行用户无法执行的操作(如果是屏幕抓取或自动化流程,那就另当别论了)。
该错误解释了问题所在,您有相互重叠的元素,并且通常可以通过在您的 poltergeist 驱动程序配置中指定更大的 window 大小来修复。您通常可以通过在单击步骤之前调用 save_and_open_screenshot
并查看屏幕截图来了解重叠的原因。如果页面太窄或太短,您可以在必要的方向上增加 window 大小。
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, window_size: [1600, 1200])
end
此外,您不应将 eq
匹配器与 current_path
一起使用,因为它没有 waiting/retrying 行为,因此您的 JS 测试最终会变得不稳定。相反,您应该使用 Capybara 提供的 have_current_path
匹配器。另外,你找到 update_button 的方式有点奇怪,如果你想将它保留在 let
块中,写成 let(:update_button) { find(:button, 'Update') }
会更容易理解,尽管我建议只使用 click_button
代替。
it 'should redirect to detail' do
visit dashboard_journal_path @journal
click_button 'Update'
page.should have_current_path(dashboard_journals_path)
end
我正在使用水豚测试我的按钮点击功能。
require 'spec_helper'
describe 'journals edition', js: true do
let(:update_button) { find('[name="commit"][value="Update"]') }
describe 'redirection after update' do
describe 'articles' do
before :each do
@journal = Journal.create(jid: '1')
end
it 'should redirect to detail' do
visit dashboard_journal_path @journal
update_button.trigger(:click)
current_path.should eq dashboard_journals_path
end
end
end
end
当我从视图中删除名称为 class 'rights_link' 的 div 时,我没有收到错误
Failure/Error: update_button.click
Capybara::Poltergeist::MouseEventFailed:
Firing a click at co-ordinates [45, 751] failed. Poltergeist detected another element with CSS selector 'html body footer div#footer div#login_info a' at this position. It may be overlapping the element you are trying to interact with. If you don't care about overlapping elements, try using node.trigger('click').
# ./spec/features/journals/journal_edition_spec.rb:17:in `block (4 levels) in <top (required)>'
这是我的视图文件
h2 Journal #{@journal.id}
= errors_for @journal
div.show
= form_for [:dashboard, @journal] do |f|
div
strong ID:
br
= @journal.id
div
strong JID:
br
= @journal.jid
div
strong Abbreviation:
br
= f.text_field :abbreviation, size: '25%'
div
strong Name:
br
= f.text_field :name, size: '25%'
div
strong Free Access:
br
= f.check_box :free_access
div
strong Static Cover Image:
br
= f.check_box :static_cover_images, class: 'static_cover_image_enable'
div class='static_cover_image'
- if @journal.cover_image.exists?
= image_tag @journal.cover_image.url(:thumbnail)
br
italic Replace static cover image:
br
= f.file_field :cover_image, as: :file
- else
= f.file_field :cover_image, as: :file
**div class='rights_link'
strong Rights Link
br
= f.check_box :rights_link_enabled, class: 'rights_link_enable'**
div class='rights_link_type'
strong Rights Link Type:
br
- if @journal.rights_link_type == 'permission_direct'
= radio_button_tag :rights_link_type, 'rights_link'
| Rights Link
= radio_button_tag :rights_link_type, 'permission_direct', true
| Permission Direct
- else
= radio_button_tag :rights_link_type, 'rights_link', true
| Rights Link
= radio_button_tag :rights_link_type, 'permission_direct'
| Permission Direct
div class='rights_link_template'
strong Rights Link URL Template:
br
= f.text_area :rights_link_template, class: 'rights_link_template', size: '50%'
div class='issn'
strong ISSN
br
= f.text_field :issn, size: '25%'
div class='rights_holder_name'
strong Rights Holder Name
br
= f.text_field :rights_holder_name, size: '25%'
div
strong Exclude From All Articles:
br
= f.check_box :exclude_from_all_articles
div
strong Enabled:
br
= check_box_tag 'journal[enabled]', 1, @journal.disabled_at ? false : true
div
strong Updated At:
br
= display_local_time @journal.updated_at
div
strong Min iOS Version:
br
= f.text_field :ios_min_version, size: '25%'
div
strong Min Android Version:
br
= f.text_field :android_min_version, size: '25%'
= f.submit "Update"
= link_to 'Back', dashboard_journals_path
请提供解决方案。
我尝试使用
update_button.trigger(:click)
但没有帮助。请注意:'rights_link' div 之前的 div 在某些情况下被隐藏和显示。
首先,如果您正在测试应用程序,请不要使用 #trigger
。建议使用 #trigger
的错误消息的重要部分是 "If you don't care about overlapping elements"。在测试应用程序时,您应该小心,否则您将允许测试执行用户无法执行的操作(如果是屏幕抓取或自动化流程,那就另当别论了)。
该错误解释了问题所在,您有相互重叠的元素,并且通常可以通过在您的 poltergeist 驱动程序配置中指定更大的 window 大小来修复。您通常可以通过在单击步骤之前调用 save_and_open_screenshot
并查看屏幕截图来了解重叠的原因。如果页面太窄或太短,您可以在必要的方向上增加 window 大小。
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, window_size: [1600, 1200])
end
此外,您不应将 eq
匹配器与 current_path
一起使用,因为它没有 waiting/retrying 行为,因此您的 JS 测试最终会变得不稳定。相反,您应该使用 Capybara 提供的 have_current_path
匹配器。另外,你找到 update_button 的方式有点奇怪,如果你想将它保留在 let
块中,写成 let(:update_button) { find(:button, 'Update') }
会更容易理解,尽管我建议只使用 click_button
代替。
it 'should redirect to detail' do
visit dashboard_journal_path @journal
click_button 'Update'
page.should have_current_path(dashboard_journals_path)
end