2012-11-26 188 views
8

工作在一個rails 3.1.2項目(Mac OS X),我有PhantomJS正確安裝(我可以運行代碼如下,它的工作原理,準確地抓住頁面標題和保存準確的截圖)Rails Phantomjs,poltergeist和水豚不能很好地玩在一起

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的如下:

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)

我敢肯定,問題是無論是水豚之間的接口poltergeist或(更可能)poltergeist和phantomjs。下面是有關寶石的版本:

水豚1.1.3
水豚,WebKit的0.13.0
騷靈1.0.2
phantomjs是1.7.0

不知道如何進一步排除故障...任何幫助將不勝感激。

+0

注意:有一件事我也試過是明確告訴吵鬧鬼在那裏我phantomjs可以發現:phantomjs =>「/usr/local/Cellar/phantomjs/1.7.0/bin/phantomjs」。這不會改變結果。不過,我覺得這證明phantomjs實際上是越來越運行,因爲如果我給它一個僞造的路徑,我得到一個錯誤。 –

回答

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 

這是否讓你谷歌的圖像?

+0

是的,它確實......其實,我發現,如果我離開軌道服務器運行並修改上面的代碼以訪問「http:// localhost:5000」,那麼它確實可以忠實地呈現該頁面。但是,當我將Capybara :: DSL添加到其他測試規格中時,它們會在不同位置崩潰......現在排除故障。謝謝!! –

+0

我要紀念這個答案正確的,因爲它讓我過去的問題「不能從rspec的內製作一個屏幕畫面」。我仍然有Capybara :: DSL故障排除,但這是一個單獨的問題。謝謝! –

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! 
+0

偉大的建議,但我已經試過(調試錯誤和真實),並沒有在問題上的差異。不斷空白的屏幕截圖。 –

+1

嘗試添加睡眠5,然後進行截圖..也許它需要一些時間來顯示 – Lichtamberg

+0

另一個偉大的建議,但無論我睡了多久,它只是出現空。 –

6

我有同樣的問題,但在我的情況下,它是由使用子域引起的。 Poltergeist被指向無意義的URL(類似「http://spb.:22789」),所以它只收到'about:blank'。

爲了解決這個問題,我做了以下內容:

  1. 集app_host和SERVER_PORT的水豚

    Capybara.app_host = 'HTTP://city.tulp.test:3003'
    水豚。SERVER_PORT = 3003

  2. 添加虛擬域/ etc/hosts中

希望這有助於。

+0

我會試試這個,讓你知道!謝謝! –

+0

嗯。相同的結果... @Eugene我假設你將你的.app_host設置爲你的LOCAL機器?測試套件在哪裏運行? –

+0

哦..我剛剛注意到你的問題,對不起。如果它仍然是實際的 - 是的,測試在本地機器上運行,但是您可以使用http://lvh.me(它始終指向127.0.0.1)作爲更常見的解決方案。 – Eugene

相關問題