8

Arbeiten in einem Rails 3.1.2 Projekt (Mac OS X), habe ich PhantomJS richtig installiert (Ich kann Code wie folgt und es funktioniert perfekt, präzise greifen der Titel der Seite und speichern eine genaue Screenshot)Rails Phantomjs, Poltergeist, und Capybara nicht gut zusammen spielen

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() 

Allerdings, wenn ich capybara/Poltergeist zu verwenden, in rspec versuchen, wie folgt:

spec_helper.rb

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

und dann eine Spezifikation mit einem Aufruf erfordert javascript:

parties_spec.rb

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

Es scheint nicht, dass mein Javascript ist gerendert werden, und auch der Screenshot ist immer leer!

Ich habe den Debugger versucht, aber das scheint auch eine leere HTML-Seite zu bringen (nur mit leeren Kopf und Körper-Tags html)

Ich bin mir ziemlich sicher, dass das Problem ist, entweder die Schnittstelle zwischen Capybara und Poltergeist oder (wahrscheinlicher) Poltergeist und Phantomjs. Hier sind die Versionen der entsprechenden Edelsteine:

Capybara 1.1.3
Capybara-webkit 0.13.0
Poltergeist 1.0.2
PhantomJS ist 1.7.0

nicht sicher, wie man weitere Fehler beheben ... Jede Hilfe wäre willkommen.

+0

Hinweis: Eine Sache, die ich auch versucht habe, ist Poltergeist explizit zu sagen, wo meine phantomjs gefunden werden können:: phantomjs => "/usr/local/Cellar/phantomjs/1.7.0/bin/phantomjs". Das ändert nicht das Ergebnis ... Ich denke jedoch, es beweist, dass Phantomjs tatsächlich ausgeführt wird, denn wenn ich einen falschen Pfad gebe, erhalte ich einen Fehler. –

Antwort

11

Erstellen Sie einen sehr einfachen Test und sehen Sie, was passiert.

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 

Heißt das, bekommen Sie ein Bild von Google?

+0

Ja, tut es ... Tatsächlich habe ich festgestellt, dass wenn ich einen Rails-Server verlasse Ausführen, und ändern Sie Ihren obigen Code, um "http: // localhost: 5000" zu besuchen, dann wird diese Seite tatsächlich getreu wiedergegeben. Wenn ich jedoch Capybara :: DSL in meine anderen Testspezifikationen einfüge, stürzen sie an verschiedenen Stellen ab ... Fehlerbehebung jetzt. Vielen Dank!! –

+0

Ich werde diese Antwort als richtig markieren, weil es mich über das Problem "kann nicht einen Screenshot von innerhalb von rspec machen". Ich habe immer noch Capybara :: DSL-Fehlerbehebung, aber das ist ein separates Problem. Vielen Dank! –

2

Vielleicht hilft es, wenn Sie den Treiber registrieren?

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

Toller Vorschlag, aber ich habe es versucht (mit Debug sowohl falsch und wahr) und keinen Unterschied in dem Problem. Kontinuierlich leere Bildschirmaufnahme. –

+1

versuche, schlaf 5 hinzuzufügen und dann den screenshot .. vielleicht braucht es einige zeit zu zeigen – Lichtamberg

+0

Ein weiterer großartiger Vorschlag, aber egal wie lange ich schlafe, es kommt nur leer. –

6

Ich hatte das gleiche Problem, aber in meinem Fall wurde es durch die Verwendung von Subdomains verursacht. Poltergeist wurde auf sinnlose URL (Art von "http://spsb.22789") hingewiesen, so dass es nichts als "ungefähr: leer" erhält.

Um dieses Problem zu lösen, ich folgende tat:

  1. Set app_host und server_port für Capybara

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

  2. Dummy-Domäne hinzufügen/etc/hosts

Hoffnung, das hilft.

+0

Ich werde das ausprobieren und Sie wissen lassen! Vielen Dank! –

+0

Hmmm. Gleiches Ergebnis ... @Eugene Ich gehe davon aus, dass du deinen .app_host auf deinen LOCAL-Rechner legst? Wo wird die Testsuite ausgeführt? –

+0

Oh .. Ich habe gerade deine Frage bemerkt, tut mir leid. Falls es noch aktuell ist - ja, Tests laufen auf dem lokalen Rechner, aber Sie können http://lvh.me (was immer auf 127.0.0.1 zeigt) als gebräuchlichere Lösung verwenden. – Eugene

Verwandte Themen