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?
risposta
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.
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.
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
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!
Grazie fantastici! Ho scelto di usare 'puts save_screenshot (nil, full: true)' così ha generato un nome di file casuale e lo ha stampato. –
Capybara ha un metodo per questo - http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Session#save_screenshot-instance_method. È supportato anche da Selenium –