当 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

,则可以更快地发现此错误