Rails Phantomjs,poltergeist和Capybara一起打得不好

时间:2012-11-26 19:49:52

标签: ruby-on-rails-3 capybara rspec-rails phantomjs poltergeist

在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的调用的规范:

parties_spec.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 1.1.3
  capybara-webkit 0.13.0
  恶作剧者1.0.2
  phantomjs是1.7.0

不确定如何进一步排查问题...我们将不胜感激。

3 个答案:

答案 0 :(得分: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

这能让你成为Google的形象吗?

答案 1 :(得分:6)

我有同样的问题,但在我的情况下,它是由使用子域引起的。恶作剧者被指向无意义的网址(有点像“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

  3. 希望这有帮助。

答案 2 :(得分: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!