PhantomJS 可以选择截取整个页面(不仅仅是当前视口)。有没有办法使用 Selenium 来做到这一点?我正在使用无头 gem 无头运行 Cucumber/Capybara 测试。我会使用 PhantomJS,但我遇到了其他一些问题。
问问题
20714 次
4 回答
51
如果有人冲上海岸寻找如何使用Poltergeist进行此操作,您只需要传递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.
文档。
希望能帮助到你!
于 2016-03-15T14:39:45.100 回答
8
原来我一直在使用take_screenshot
headless gem 提供的方法,而我本可以使用该page.save_screenshot()
方法,这正是我需要的。谢谢你,安德烈。
于 2013-05-23T07:52:03.723 回答
2
我尝试了很多方法来充分利用 Capybara/Selenium。
我尝试过的只有一件事似乎有效,那就是使用 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
我调整它两次以获取高度信息。
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
于 2019-01-19T01:27:43.030 回答
1
你也可以这样做:
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 文件中,因此您不必使用任何帮助程序或将任何额外代码添加到您的步骤定义中。
于 2013-05-24T17:49:27.453 回答