最小的Capybara / Poltergeist测试返回空页

时间:2013-10-20 11:56:38

标签: ruby capybara phantomjs poltergeist

看来我正在回顾SO帖子中采取的步骤:Capybara, Poltergeist and Phantomjs and giving an empty response in body。 (如果需要,请将此标记为重复,但我包含一个最小的独立测试用例和版本号。)

问题

我做了什么明显错误的事吗?我可以运行另一个可以帮助隔离问题的最小测试吗?

file:pgtest.rb
require 'rubygems'
require 'capybara'
require 'capybara/dsl'
require 'capybara/poltergeist'

module PGTest
  include Capybara::DSL
  extend self

  def test
    Capybara.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new(app)
    end

    Capybara.current_driver = :poltergeist
    session = Capybara::Session.new(:poltergeist)

    visit "http://www.google.com"
    sleep 5
    puts session.html
  end
end

PGTest.test

如下调用,它会打印一个空页:

$ ruby pgtest.rb
<html><head></head><body></body></html>

环境

  • OS X 10.8.5(12F45)
  • ruby​​ 2.0.0p247(2013-06-27)[x86_64-darwin12.4.0]
  • phantomjs 1.9.2
  • capybara(2.1.0)
  • poltergeist(1.4.1)

absolving phantomjs

值得注意的是,我可以使用phantomjs从www.google.com中提取html:

file:pjs_dump.js
var page = require('webpage').create();
page.open("http://www.google.com", function () {
    var html = page.evaluate(function () {
        return document.documentElement.outerHTML;
    });
    console.log(html);
    phantom.exit();
});

当我运行'phantomjs pjs_dump.js'时,它会从www.google.com打印html,因此幻像似乎正常工作。

2 个答案:

答案 0 :(得分:1)

这对我有用:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'
require 'capybara/poltergeist'

Capybara.run_server = false
Capybara.current_driver = :poltergeist

class PGTest
  include Capybara::DSL

  def test
    visit "http://www.google.com"
    puts page.body
  end
end

PGTest.new.test

答案 1 :(得分:0)

使用rspec,capybara和poltergeist测试rails应用程序时遇到了类似的问题。当主体为空时尝试查找元素时,规范失败。

原来,问题出在我的rails代码中。它导致错误,页面没有渲染,并且水豚收到一个空页面。我没有堆栈跟踪。