2013-05-22 11 views
10

PhantomJS ha l'opzione di acquisire uno screenshot dell'intera pagina (non solo la finestra corrente). C'è un modo per farlo utilizzando il selenio? Sto facendo funzionare i test Cucumber/Capybara senza testa, usando la gemma senza testa. Vorrei usare PhantomJS, ma ho avuto qualche altro problema.È possibile fare uno screenshot dell'intera pagina con Selenium/Capybara?

+3

Capybara ha un metodo per questo - http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Session#save_screenshot-instance_method. È supportato anche da Selenium –

risposta

3

Ho scoperto che stavo usando il metodo take_screenshot fornito dalla gemma senza testa, quando avrei potuto usare il metodo page.save_screenshot(), che fa esattamente ciò di cui ho bisogno. Grazie, Andrey.

1

Si potrebbe anche fare qualcosa di simile:

After do |scenario| 
    take_screenshot(@browser, scenario) 
end 

def take_screenshot(browser, scenario) 
    if scenario.failed? 
    scenario_name = scenario.name.gsub /[^\w\-]/, ' ' 
    time = Time.now.strftime("%Y-%m-%d %H%M") 
    screenshot_path = './failed_png/' + time + ' - ' + scenario_name + '.png' 
    else 
    scenario_name = scenario.name.gsub /[^\w\-]/, ' ' 
    time = Time.now.strftime("%Y-%m-%d %H%M") 
    screenshot_path = './success_png/' + time + ' - ' + scenario_name + '.png' 
    end 
    browser.save_screenshot(screenshot_path) 
end 

Se si commette un failed_png e la cartella success_png, questo codice avrà uno screenshot per ogni successo e fallimento, e metterlo nelle rispettive cartelle con il timestamp su di essa. Questo codice va nel tuo file env.rb, e fa in modo che tu non debba usare alcun aiuto o aggiungere alcun codice extra ai tuoi step def.

+0

Grazie, Whitney. Ho già degli screenshot automatici, ma solo in caso di errore. Eseguo anche l'html al momento del fallimento per scopi di debug. Uso qualcosa come 'File.open (" errors/# {filename} .html ", 'w') {| f | f.write (page.html)} ' – TrashyMcTrash

27

Nel caso qualcuno ha lavato in questa spiaggia alla ricerca di come fare questo con Poltergeist non vi resta che passare l'argomento full:

page.save_screenshot('screen.png', full: true) 

Docs.

Spero che aiuti!

+0

Grazie fantastici! Ho scelto di usare 'puts save_screenshot (nil, full: true)' così ha generato un nome di file casuale e lo ha stampato. –

Problemi correlati