Capybara - 注入脚本标记并等待异步任务完成

时间:2015-02-27 20:00:38

标签: javascript ruby-on-rails selenium capybara poltergeist

我遇到了在Capybara注入脚本的问题。这是代码段。

Capybara.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new(app, :phantomjs_options => ['--debug=no', '--ignore-ssl-errors=yes'], :js_errors => false)
    end

    Capybara.configure do |c|
      c.javascript_driver = :poltergeist
      c.default_driver = :poltergeist
      c.app_host = "http://www.google.com"
      c.default_wait_time = 120
    end

    Capybara.current_session.driver.headers = {
      'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36',
      'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    }
    visit('/')
    Capybara.current_session.driver.execute_script("alert('Working!');")
    sleep(1)
    system('rm /tmp/screenshot.png')
    Capybara.current_session.driver.save_screenshot('/tmp/screenshot.png')

这里我正在注入一个脚本,它会进行一些ajax调用并更改dom。但是,当我拍摄快照时,我无法在页面中看到任何更改,就好像脚本从未出现过一样。我还尝试添加一个简单的警报声明,但是没有在快照中看到警报。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

http://somescript.js似乎是一个非常不可能的脚本src的URL,你确定这是一个在本地解析为脚本的东西吗?

答案 1 :(得分:2)

警告,这是一个模式对话框,不会显示在屏幕截图中。

之所以如此,是因为PhantomJS是一个无头浏览器,实际上并没有渲染整个页面,在制作截图时,整个网页内容被保存(渲染)到一个文件中(< strong>没有额外的模态窗口!)。因此,警报模式将不会出现在PhantomJs截图中。

因此,您无法截取警报。您可以做的是使用onAlert处理程序获取警报的上下文:

page.onAlert = function(msg) {
  console.log('ALERT: ' + msg);
}; 

或者,如果您使用像Selenium这样的javascript驱动程序使用Capybara:

 alert = page.driver.browser.switch_to.alert
 alertTest = alert.text
 alert.accept