当 link 是 href javascript=void(0) 的模式时,水豚打开 window 不起作用
Capybara open window does not work when link is a modal with href javascript=void(0)
我成功地使用了水豚 window_opened_by,但在一个特定的测试中,window 打开的是一个 Facebook 对话框(它以模式 "above" 另一个 window),在这种情况下,测试失败。
准确地说,当用户点击link时,它并没有打开一个新标签,而是打开了一个"popup"。它与此处显示的弹出窗口类型完全相同:https://jsfiddle.net/stichoza/EYxTJ/
view.html.erb
<div class="col-xs-4 action-facebook" id="js-fbShareBtn">
<a
href="javascript:void(0)"
title="Share on Facebook"
target="_blank"
rel="noreferrer">
Share on facebook
</span>
</a>
</div>
Rspec test.rb
it "on deal page button SHARE works effectively", js: true do
visit deal_page_path(deal_path)
facebook_window = window_opened_by do
click_link 'Share on Facebook'
end
within_window facebook_window do
expect(page).to have_css("html#facebook")
end
end
facebook 模态由 juavascript 激活:
function activateFbShareBtn() {
$fbShareBtn.on('click', function(e) {
FB.ui({
method: 'share',
mobile_iframe: true,
display: 'popup',
href: gon.deal_actual_url,
}, function(response){});
});
}
});
}
我收到此错误消息:
Capybara::WindowError:
block passed to #window_opened_by opened 0 windows instead of 1
我检查过,如果我将视图中的 href 从 href="javascript:void(0)" 更改为标准 link,例如 href="https://www.example.com",那么测试将失败(这是预期的正常现象www.example.com) 上没有内容,但至少我没有收到此 Capybara::WindowError 错误。所以我很确定这就是原因。
我怎样才能完成这项工作?如何测试打开不是标准 href link 而是在 href="javascript:void(0)"
上的模式
编辑:在有人提出该问题可能与某些 javascript 错误有关后,我对其进行了追踪并发现该错误是由于对 facebook sdk 库的调用未被列入白名单rspec:
config.allow_url("https://connect.facebook.net/en_US/sdk.js")
如主要问题的评论中所述,这更可能是 JS 错误(结果证明是由于 capybara-webkit
白名单而未加载的 JS 文件)而不是任何操作与实际 link。由于正在使用 capybara-webkit
,如果您在 capybara-webkit
配置中启用 raise_javascript_errors
- https://github.com/thoughtbot/capybara-webkit#configuration
,则可以更快地发现此错误
我成功地使用了水豚 window_opened_by,但在一个特定的测试中,window 打开的是一个 Facebook 对话框(它以模式 "above" 另一个 window),在这种情况下,测试失败。
准确地说,当用户点击link时,它并没有打开一个新标签,而是打开了一个"popup"。它与此处显示的弹出窗口类型完全相同:https://jsfiddle.net/stichoza/EYxTJ/
view.html.erb
<div class="col-xs-4 action-facebook" id="js-fbShareBtn">
<a
href="javascript:void(0)"
title="Share on Facebook"
target="_blank"
rel="noreferrer">
Share on facebook
</span>
</a>
</div>
Rspec test.rb
it "on deal page button SHARE works effectively", js: true do
visit deal_page_path(deal_path)
facebook_window = window_opened_by do
click_link 'Share on Facebook'
end
within_window facebook_window do
expect(page).to have_css("html#facebook")
end
end
facebook 模态由 juavascript 激活:
function activateFbShareBtn() {
$fbShareBtn.on('click', function(e) {
FB.ui({
method: 'share',
mobile_iframe: true,
display: 'popup',
href: gon.deal_actual_url,
}, function(response){});
});
}
});
}
我收到此错误消息:
Capybara::WindowError:
block passed to #window_opened_by opened 0 windows instead of 1
我检查过,如果我将视图中的 href 从 href="javascript:void(0)" 更改为标准 link,例如 href="https://www.example.com",那么测试将失败(这是预期的正常现象www.example.com) 上没有内容,但至少我没有收到此 Capybara::WindowError 错误。所以我很确定这就是原因。
我怎样才能完成这项工作?如何测试打开不是标准 href link 而是在 href="javascript:void(0)"
上的模式编辑:在有人提出该问题可能与某些 javascript 错误有关后,我对其进行了追踪并发现该错误是由于对 facebook sdk 库的调用未被列入白名单rspec:
config.allow_url("https://connect.facebook.net/en_US/sdk.js")
如主要问题的评论中所述,这更可能是 JS 错误(结果证明是由于 capybara-webkit
白名单而未加载的 JS 文件)而不是任何操作与实际 link。由于正在使用 capybara-webkit
,如果您在 capybara-webkit
配置中启用 raise_javascript_errors
- https://github.com/thoughtbot/capybara-webkit#configuration