PhantomJS可以选择整个页面的截图(而不仅仅是当前的视口)。有没有办法使用Selenium?我正在无头地使用无头宝石进行Cucumber / Capybara测试。我会使用PhantomJS,但我遇到了其他一些问题。
答案 0 :(得分:38)
如果有人在这个海岸寻找如何使用 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.
希望它有所帮助!
答案 1 :(得分:4)
原来我一直在使用无头宝石提供的take_screenshot
方法,当时我可以使用page.save_screenshot()
方法,这正是我所需要的。谢谢,安德烈。
答案 2 :(得分: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文件中,因此您无需使用任何帮助程序或向步骤defs添加任何额外代码。
答案 3 :(得分:1)
为了与Capybara / Selenium一起工作,我尝试了很多事情。
我尝试过的只有一件事似乎起作用,并且它使用的是headless_chrome。请记住,我使用循环来截取不同宽度的屏幕截图:
mod = sys.argv[1]
command =__import__(mod)
# assuming your pattern has a run method defined.
command.run()
我将其调整两次以获取高度信息。
rails_helper.rb:
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