2013-05-22 91 views
10

PhantomJS可以选择整个页面的截图(而不仅仅是当前的视口)。有什么方法可以使用Selenium?我正在无头无终地运行黄瓜/水豚测试,使用无头宝石。我会使用PhantomJS,但我还有其他一些问题。是否可以使用Selenium/Capybara截取整个页面的屏幕截图?

+3

水豚有一个方法 - http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Session#save_screenshot-instance_method。它也支持Selenium –

回答

3

原来我一直在使用无头的宝石提供的take_screenshot方法,当时我刚刚使用了page.save_screenshot()方法,它完全符合我的需要。谢谢你,安德烈。

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文件中,这样你就不必使用任何助手或者为你的step defs添加额外的代码。

+0

谢谢惠特尼。我已经有了自动屏幕截图,但只有在出现故障的情况下。为了进行调试,我还输出了失败时的html。我使用了'File.open(“errors /#{filename} .html”,'w'){| f | f.write(page.html)}' – TrashyMcTrash

27

万一有人冲上来此岸寻找如何与骚灵做到这一点,你只需要通过full说法:

page.save_screenshot('screen.png', full: true) 

Docs

希望它有帮助!

+0

非常感谢!我选择使用'puts save_screenshot(nil,full:true)',以便生成一个随机文件名并将其打印出来。 –