6

看来我正在追溯 SO 帖子中采取的步骤: Capybara、Poltergeist 和 Phantomjs,并在 body 中给出了一个空的响应。(如果你愿意,可以将此标记为重复,但我包含了一个最小的独立测试用例和版本号。)

问题

我在做任何明显错误的事情吗?我可以运行另一个可能有助于隔离问题的最小测试吗?

文件: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)
  • 红宝石 2.0.0p247 (2013-06-27) [x86_64-darwin12.4.0]
  • 幻影 1.9.2
  • 水豚 (2.1.0)
  • 恶作剧 (1.4.1)

赦免幻影

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

文件: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,因此 phantomjs 似乎工作正常。

4

2 回答 2

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
于 2013-10-30T17:25:50.383 回答
0

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

事实证明,问题出在我的 Rails 代码中。它导致了一个错误,页面没有渲染,capybara 收到了一个空页面。而且我在堆栈跟踪中什么都没有。

于 2015-05-28T09:40:47.413 回答