我成功地使用水豚window_opened_by,但是在一个特定的测试中,打开的窗口是一个Facebook对话框(它作为另一个窗口"上方"的模态打开),在这种情况下测试失败。
确切地说,当用户单击链接时,它不会打开新选项卡,而是打开一个"弹出窗口"。它与此处显示的弹出窗口类型完全相同:https://jsfiddle.net/stichoza/EYxTJ/
查看.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)" 更改为标准链接,例如 href="https://www.example.com",那么测试就会失败(这是正常的,因为预期的内容不在 www.example.com 上),但至少我没有收到这个 Capybara::WindowError 错误。所以我很确定这就是原因。
我怎样才能做到这一点?如何测试一个不是打开标准 href 链接而是在 href="javascript:void(0)" 上的模态
编辑:在建议该问题可能与某些javascript错误更相关之后,我对其进行了跟踪,发现该错误是由于对facebook sdk库的调用未在rspec中列入白名单:
config.allow_url("https://connect.facebook.net/en_US/sdk.js")
正如主要问题的评论中所记录的那样,这更有可能是JS错误(并且由于capybara-webkit
白名单而未加载JS文件),而不是与实际链接有关。由于正在使用capybara-webkit
,如果您在capybara-webkit
配置中启用raise_javascript_errors
,则可能会更快地捕获此错误 - https://github.com/thoughtbot/capybara-webkit#configuration