PhantomJSには、(現在のビューポートだけでなく)ページ全体のスクリーンショットを撮るオプションがあります。 Seleniumを使用してこれを行う方法はありますか?ヘッドレスジェムを使用して、キュウリ/キャピバラテストをヘッドレスで実行しています。 PhantomJSを使用しますが、他にも問題があります。
ヘッドレスgemによって提供された_take_screenshot
_メソッドを使用していたことが判明しましたが、page.save_screenshot()
メソッドを使用できたのに、まさに必要なことを実行できました。ありがとう、アンドレイ。
ポルターガイストでこれを行う方法を探している人がこの海岸を洗い流した場合は、full
引数を渡す必要があります。
page.save_screenshot('screen.png', full: true) # If providing a custom file name.
page.save_screenshot(full: true) # Capybara sets a name based on timestamp.
page.save_and_open_screenshot('screen.png', full: true) # Same as save_screenshot.
page.save_and_open_screenshot(full: true) # Same as save_screenshot.
ドキュメント 。
それが役に立てば幸い!
Capybara/Seleniumでフルハイトで動作するように、さまざまなことを試しました。
私が試したのは1つだけうまくいったようで、headless_chromeを使用していました。ループを使用してさまざまな幅でスクリーンショットを撮ることに注意してください。
def screenshot
driver = Capybara.current_session.driver
window = Capybara.current_session.driver.browser.manage.window
widths = [320, 1380] #leave normal w as last
widths.each do |w|
window.resize_to(w, 900)
total_width = driver.execute_script("return document.body.offsetWidth")
total_height = driver.execute_script("return document.body.scrollHeight")
window.resize_to(total_width, total_height)
save_screenshot
end
end
高さ情報を取得するために、サイズを2回変更します。
Rails_helper.rb:
Capybara.register_driver :headless_chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: {
"args" => %w{
headless
disable-gpu
--disable-notifications
}
}
)
Capybara::Selenium::Driver.new app,
browser: :chrome,
desired_capabilities: capabilities
end
Capybara.javascript_driver = :headless_chrome
Capybara.current_driver = :headless_chrome
次のようなこともできます。
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
Failed_pngフォルダーとsuccess_pngフォルダーを作成すると、このコードは成功と失敗ごとにスクリーンショットを撮り、タイムスタンプが付いたそれぞれのフォルダーに配置します。このコードはenv.rbファイルに含まれているため、ヘルパーを使用したり、ステップ定義にコードを追加したりする必要はありません。