当链接是带有 href javascript=void(0) 的模态时,Capybara 打开窗口不起作用



我成功地使用水豚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

最新更新