是否可以使用Selenium / Capybara截取整页的屏幕截图?

时间:2013-05-22 14:54:40

标签: selenium cucumber capybara screenshot

PhantomJS可以选择整个页面的截图(而不仅仅是当前的视口)。有没有办法使用Selenium?我正在无头地使用无头宝石进行Cucumber / Capybara测试。我会使用PhantomJS,但我遇到了其他一些问题。

4 个答案:

答案 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.

Docs

希望它有所帮助!

答案 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