From c1f091de91f9388d91931e4567e89cd2a18aa076 Mon Sep 17 00:00:00 2001 From: Jarmo Pertman Date: Wed, 15 Aug 2012 09:24:32 +0300 Subject: [PATCH] Add support for Browser#screenshot API. --- Gemfile.lock | 34 ++++++++++++++++++++------------- lib/watir-classic/ie-class.rb | 4 ++++ lib/watir-classic/ie.rb | 1 + lib/watir-classic/screenshot.rb | 33 ++++++++++++++++++++++++++++++++ watir-classic.gemspec | 1 + 5 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 lib/watir-classic/screenshot.rb diff --git a/Gemfile.lock b/Gemfile.lock index c2474283..d3cf0b20 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,6 +7,7 @@ PATH rautomation (~> 0.7.2) user-choices win32-process (>= 0.5.5) + win32screenshot windows-pr (>= 0.6.6) yajl-ruby @@ -15,29 +16,32 @@ GEM specs: builder (3.0.0) diff-lcs (1.1.3) - ffi (1.0.11) - hoe (3.0.3) + ffi (1.1.3-x86-mingw32) + hoe (3.0.6) rake (~> 0.8) - nokogiri (1.5.2-x86-mingw32) + mini_magick (3.2.1) + subexec (~> 0.0.4) + nokogiri (1.5.5-x86-mingw32) rack (1.4.1) rack-protection (1.2.0) rack rake (0.9.2.2) rautomation (0.7.2) - rspec (2.9.0) - rspec-core (~> 2.9.0) - rspec-expectations (~> 2.9.0) - rspec-mocks (~> 2.9.0) - rspec-core (2.9.0) - rspec-expectations (2.9.0) + rspec (2.11.0) + rspec-core (~> 2.11.0) + rspec-expectations (~> 2.11.0) + rspec-mocks (~> 2.11.0) + rspec-core (2.11.1) + rspec-expectations (2.11.2) diff-lcs (~> 1.1.3) - rspec-mocks (2.9.0) + rspec-mocks (2.11.1) s4t-utils (1.0.4) hoe (>= 1.3.0) sinatra (1.3.2) rack (~> 1.3, >= 1.3.6) rack-protection (~> 1.2) tilt (~> 1.3, >= 1.3.3) + subexec (0.0.4) syntax (1.0.0) tilt (1.3.3) user-choices (1.1.6.1) @@ -45,9 +49,13 @@ GEM s4t-utils (>= 1.0.3) xml-simple (>= 1.0.11) win32-api (1.4.8-x86-mingw32) - win32-process (0.6.5) - windows-pr (>= 1.1.2) - windows-api (0.4.1) + win32-process (0.6.6) + windows-pr (>= 1.2.2) + win32screenshot (1.0.7) + ffi (~> 1.0) + mini_magick (~> 3.2.1) + rautomation (~> 0.7.0) + windows-api (0.4.2) win32-api (>= 1.4.5) windows-pr (1.2.2) win32-api (>= 1.4.5) diff --git a/lib/watir-classic/ie-class.rb b/lib/watir-classic/ie-class.rb index bd74c4eb..34e33365 100644 --- a/lib/watir-classic/ie-class.rb +++ b/lib/watir-classic/ie-class.rb @@ -497,6 +497,10 @@ def url return @ie.LocationURL end + def screenshot + Screenshot.new(hwnd) + end + def window(specifiers={}, &blk) win = Window.new(self, specifiers, &blk) win.use &blk if blk diff --git a/lib/watir-classic/ie.rb b/lib/watir-classic/ie.rb index 7ae62594..54b65ea1 100644 --- a/lib/watir-classic/ie.rb +++ b/lib/watir-classic/ie.rb @@ -2,6 +2,7 @@ require 'watir-classic/core' require 'watir-classic/close_all' require 'watir-classic/ie-process' +require 'watir-classic/screenshot' # these switches need to be deleted from ARGV to enable the Test::Unit # functionality that grabs diff --git a/lib/watir-classic/screenshot.rb b/lib/watir-classic/screenshot.rb new file mode 100644 index 00000000..5a62cc4a --- /dev/null +++ b/lib/watir-classic/screenshot.rb @@ -0,0 +1,33 @@ +require "tmpdir" +require "base64" +require "win32/screenshot" + +module Watir + class Screenshot + def initialize(browser_hwnd) + @hwnd = browser_hwnd + end + + def save(path) + screenshot.write(path) + end + + def png + path = File.expand_path "temporary-image-#{Time.now.to_i}.png", Dir.tmpdir + save path + File.open(path, "rb") {|file| file.read} + ensure + File.delete path rescue nil + end + + def base64 + Base64.encode64 png + end + + private + + def screenshot + ::Win32::Screenshot::Take.of(:window, :hwnd => @hwnd) + end + end +end diff --git a/watir-classic.gemspec b/watir-classic.gemspec index d9e3efc8..259f1180 100644 --- a/watir-classic.gemspec +++ b/watir-classic.gemspec @@ -30,6 +30,7 @@ Gem::Specification.new do |s| s.add_dependency 'rautomation', '~>0.7.2' s.add_dependency 'user-choices' s.add_dependency 'yajl-ruby' + s.add_dependency 'win32screenshot' s.add_development_dependency("rspec", "~>2.3") s.add_development_dependency("syntax")