8

在 rails 3.1.2 项目(mac OS X)中工作,我正确安装了 PhantomJS(我可以运行如下代码,它运行良好,准确地抓取页面标题并保存准确的屏幕截图)

try_phantom.coffee

page = require('webpage').create()
page.open 'http://localhost:5000/parties/onetestparty', (status) ->
    title = page.evaluate -> document.title
    console.log "Title: #{title}"
    page.render './log/javascript_screenshot.png'
    phantom.exit()

但是,当我尝试在 rspec 中使用 capybara/poltergeist 时,如下所示:

spec_helper.rb

require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist

然后使用需要javascript的调用规范:

缔约方规范.rb

        it "should allow a simple screenshot", js: true do
            visit "/"
            page.driver.render('./log/screen_Home.png', :full => true)
        end

我的javascript似乎没有被渲染,而且截图总是空白!

我已经尝试过调试器,但这似乎也带来了一个空白的 HTML 页面(只是带有空头和正文标签的 html)

我很确定问题出在 capybara 和 poltergeist 或(更有可能)poltergeist 和 phantomjs 之间的接口。以下是相关 gem 的版本:

capybara 1.1.3 capybara
-webkit 0.13.0
poltergeist 1.0.2
phantomjs 是 1.7.0

不知道如何进一步排除故障......任何帮助将不胜感激。

4

3 回答 3

11

创建一个非常简单的测试,看看会发生什么。

simple_spec.rb

require 'spec_helper'
require 'capybara/poltergeist'
include Capybara::DSL
Capybara.javascript_driver = :poltergeist

describe 'some stuff which requires js', :js => true do
  it 'will take a screenshot' do
    visit("http://google.com")
    page.driver.render('./file.png', :full => true)
  end
end

这会让你得到谷歌的形象吗?

于 2012-11-27T14:43:13.863 回答
6

我有同样的问题,但在我的情况下,它是由使用子域引起的。Poltergeist 被指向无意义的 url(类似于“http://spb.:22789”),因此它只收到“about:blank”。

为了解决这个问题,我做了以下事情:

  1. 为 Capybara 设置 app_host 和 server_port

    Capybara.app_host = 'http://city.tulp.test:3003' Capybara.server_port
    = 3003

  2. 将虚拟域添加到 /etc/hosts

希望这可以帮助。

于 2012-12-05T11:00:49.807 回答
2

如果您注册驱动程序可能会有所帮助?

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, {debug: false})
end
Capybara.current_driver = :poltergeist # NOTE THE CURRENT_DRIVER, NOT JAVASCRIPT_DRIVER!
于 2012-11-26T22:02:09.070 回答