rwebspec 1.7.1 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,5 +1,15 @@
1
1
  CHANGELOG
2
2
  =========
3
+ 1.8.1
4
+ [Upgrade] new take screenshot library
5
+ [Fix] only take screenshot on failed assertions if $task_screenshot is set
6
+ [Enhancement] add close_all for firefox browser (pass by argument)
7
+ [Enhancement] refactored driver.close_all_browsers
8
+ [New] background_visit now works new http-client version
9
+ [New] element_by_id() for firefox
10
+ [New] web_page.url
11
+ [Fix] More correctly detect platform: mswin or mingw
12
+ [New] add Array.sum methods
3
13
 
4
14
  1.7.1
5
15
  [New] New version scheme, matching Watir versioning, appending minor number
data/Rakefile CHANGED
@@ -70,12 +70,12 @@ end
70
70
  spec = Gem::Specification.new do |s|
71
71
  s.platform= Gem::Platform::RUBY
72
72
  s.name = "rwebspec"
73
- s.version = "1.7.1"
73
+ s.version = "1.8.1"
74
74
  s.summary = "Executable functional specification for web applications in RSpec syntax and Watir"
75
75
  # s.description = ""
76
76
 
77
77
  s.author = "Zhimin Zhan"
78
- s.email = "zhimin@agileway.net"
78
+ s.email = "zhimin@agileway.com.au"
79
79
  s.homepage= "http://github.com/zhimin/rwebspec/tree/master"
80
80
  s.rubyforge_project = "rwebspec"
81
81
 
@@ -91,7 +91,7 @@ spec = Gem::Specification.new do |s|
91
91
  s.files = s.files + Dir.glob( "docs/**/*" )
92
92
  s.add_dependency(%q<rspec>, ["= 1.1.12"])
93
93
 
94
- s.add_dependency("commonwatir", ">= 1.8.0")
94
+ s.add_dependency("commonwatir", ">= 1.8.1")
95
95
  end
96
96
 
97
97
  Rake::GemPackageTask.new(spec) do |pkg|
@@ -377,7 +377,7 @@ module RWebSpec
377
377
  yield
378
378
  rescue StandardError => e
379
379
  # puts "[DEBUG] Assertion error: #{e}"
380
- take_screenshot
380
+ take_screenshot if $take_screenshot
381
381
  raise e
382
382
  end
383
383
  end
@@ -95,21 +95,25 @@ module RWebSpec
95
95
  # @web_browser.close_browser unless $ITEST2_LEAVE_BROWSER_OPEN_AFTER_RUN
96
96
  @web_browser.close_browser
97
97
  else
98
- WebBrowser.close_all_browsers
98
+ close_all_browsers
99
99
  end
100
100
  end
101
-
102
101
  alias close_ie close_browser
103
102
 
104
103
 
105
104
  # Close all opening browser windows
106
105
  #
107
106
  def close_all_browsers
108
- if is_firefox?
109
- FireWatir::Firefox.close_all
110
- else
111
- Watir::IE.close_all
112
- end
107
+ if @web_browser
108
+ if is_firefox?
109
+ FireWatir::Firefox.close_all
110
+ else
111
+ Watir::IE.close_all
112
+ end
113
+ else
114
+ browser_type = $ITEST2_BROWSER ? $ITEST2_BROWSER.downcase.to_sym : :ie
115
+ WebBrowser.close_all_browsers(browser_type)
116
+ end
113
117
  end
114
118
 
115
119
  # Verify the next page following an operation.
@@ -168,7 +172,6 @@ module RWebSpec
168
172
  @web_browser.goto_page(page) if @web_browser
169
173
  }
170
174
  end
171
-
172
175
  alias visit goto_page
173
176
 
174
177
 
@@ -181,29 +184,32 @@ module RWebSpec
181
184
  end
182
185
 
183
186
  # Go to specific url in background (i.e not via browwser, different from goto_url)
184
- # This won't share the session with what's currenlty in browser
187
+ # This won't share the session with what's currenlty in browser, proxy setting
185
188
  #
186
189
  # One use example: resetting database
187
190
  # background_visit("/reset")
188
191
  #
189
- def background_visit(url)
192
+ def background_visit(url, opts = {})
190
193
  require 'httpclient'
191
194
  begin
192
195
  client = HTTPClient.new
193
196
  if url && url =~ /^http/
194
- http_response = client.get(url).body.content
197
+ http_response = client.get(url).body
195
198
  else
196
199
  base_url = $ITEST2_PROJECT_BASE_URL || $BASE_URL
197
- http_response = client.get("#{base_url}#{url}").body.content
200
+ http_response = client.get("#{base_url}#{url}").body
198
201
  end
202
+
203
+ http_response = http_response.content if http_response.respond_to?("content")
199
204
  rescue => e
200
205
  raise e
201
206
  end
202
207
  end
203
208
 
204
- # Attach to existinb browser window
209
+ # Attach to existing browser window
205
210
  #
206
- # attach_browser(:title, )
211
+ # attach_browser(:title, "Page" )
212
+ # attach_browser(:url, "http://wwww..." )
207
213
  def attach_browser(how, what, options = {})
208
214
  options.merge!(:browser => is_firefox? ? "Firefox" : "IE") unless options[:browser]
209
215
  begin
@@ -941,7 +947,7 @@ module RWebSpec
941
947
 
942
948
  # take_screenshot to save the current active window
943
949
  # TODO can't move mouse
944
- def take_screenshot
950
+ def take_screenshot_old
945
951
  if is_windows? && $ITEST2_DUMP_PAGE
946
952
  begin
947
953
  puts "[DEBUG] Capturing screenshots..."
@@ -961,6 +967,38 @@ module RWebSpec
961
967
  end
962
968
 
963
969
 
970
+
971
+ # use win32screenshot library to save curernt active window, which shall be IE
972
+ #
973
+ def take_screenshot
974
+ # puts "calling new take screenshot"
975
+ if $testwise_screenshot_supported && is_windows?
976
+ # puts "testwise supported: #{$testwise_screenshot_supported}"
977
+ begin
978
+ screenshot_image_filename = "screenshot_" + Time.now.strftime("%m%d%H%M%S") + ".jpg"
979
+ the_dump_dir = default_dump_dir
980
+ FileUtils.mkdir_p(the_dump_dir) unless File.exists?(the_dump_dir)
981
+ screenshot_image_filepath = File.join(the_dump_dir, screenshot_image_filename)
982
+ screenshot_image_filepath.gsub!("/", "\\") if is_windows?
983
+
984
+ FileUtils.rm_f(screenshot_image_filepath) if File.exist?(screenshot_image_filepath)
985
+
986
+ if is_firefox? then
987
+ Win32::Screenshot::Take.of(:window, :title => /mozilla\sfirefox/i).write(screenshot_image_filepath)
988
+ elsif ie
989
+ Win32::Screenshot::Take.of(:window, :title => /internet\sexplorer/i).write(screenshot_image_filepath)
990
+ else
991
+ Win32::Screenshot::Take.of(:foreground).write(screenshot_image_filepath)
992
+ end
993
+ notify_screenshot_location(screenshot_image_filepath)
994
+ rescue => e
995
+ puts "error on taking screenshot: #{e}"
996
+ end
997
+ end
998
+ end
999
+
1000
+ # end of methods
1001
+
964
1002
  end
965
1003
 
966
1004
  end
@@ -112,7 +112,7 @@ module RWebSpec
112
112
  def prepare_to_click_button_in_popup(button = "OK", wait_time = 3)
113
113
  # !@web_browser.is_firefox?
114
114
  # TODO: firefox is OK
115
- if RUBY_PLATFORM =~ /mswin/ then
115
+ if RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/ then
116
116
  start_checking_js_dialog(button, wait_time)
117
117
  else
118
118
  raise "this only support on Windows and on IE"
@@ -9,6 +9,11 @@ class Array
9
9
  def average
10
10
  inject(0.0) { |sum, e| sum + e } / length
11
11
  end
12
+
13
+ # why it is removed total
14
+ def sum
15
+ inject(0.0) { |sum, e| sum + e }
16
+ end
12
17
  end
13
18
 
14
19
  # useful hekoer methods for testing
@@ -326,15 +326,14 @@ module RWebSpec
326
326
  end
327
327
  sleep 2
328
328
  end
329
-
330
329
  alias close close_browser
331
330
 
332
- #TODO determine browser type, check FireWatir support or not
333
- def self.close_all_browsers
334
- if RUBY_PLATFORM.downcase.include?("mswin")
331
+ def self.close_all_browsers(browser_type = :ie)
332
+ if browser_type == :ie
335
333
  Watir::IE.close_all
336
- else
334
+ elsif browser_type == :firefox
337
335
  # raise "not supported in FireFox yet."
336
+ FireWatir::Firefox.new.close_all
338
337
  end
339
338
  end
340
339
 
@@ -553,7 +552,9 @@ module RWebSpec
553
552
  def element_by_id(elem_id)
554
553
  if is_firefox?
555
554
  # elem = @browser.document.getElementById(elem_id)
556
- elem = div(:id, elem_id) || label(:id, elem_id) || button(:id, elem_id) || span(:id, elem_id) || hidden(:id, elem_id) || link(:id, elem_id) || radio(:id, elem_id)
555
+ # elem = div(:id, elem_id) || label(:id, elem_id) || button(:id, elem_id) ||
556
+ # span(:id, elem_id) || hidden(:id, elem_id) || link(:id, elem_id) || radio(:id, elem_id)
557
+ elem = browser.element_by_xpath("//*[@id='#{elem_id}']")
557
558
  else
558
559
  elem = @browser.document.getElementById(elem_id)
559
560
  end
@@ -576,7 +577,7 @@ module RWebSpec
576
577
  end
577
578
 
578
579
  def select_file_for_upload(file_field, file_path)
579
- normalized_file_path = RUBY_PLATFORM.downcase.include?("mswin") ? file_path.gsub("/", "\\") : file_path
580
+ normalized_file_path = RUBY_PLATFORM.downcase.include?("mingw") ? file_path.gsub("/", "\\") : file_path
580
581
  file_field(:name, file_field).set(normalized_file_path)
581
582
  end
582
583
 
@@ -80,6 +80,10 @@ module RWebSpec
80
80
  @web_browser.text
81
81
  end
82
82
 
83
+ def url
84
+ @web_browser.url
85
+ end
86
+
83
87
  # TO validate
84
88
  def contains?(ary)
85
89
  return true if ary.nil?
data/lib/rwebspec.rb CHANGED
@@ -24,7 +24,16 @@ require 'active_support/core_ext'
24
24
  require 'spec'
25
25
 
26
26
  unless defined? RWEBSPEC_VERSION
27
- RWEBSPEC_VERSION = RWEBUNIT_VERSION = "1.7.1"
27
+ RWEBSPEC_VERSION = RWEBUNIT_VERSION = "1.8.1"
28
+ end
29
+
30
+ if RUBY_PLATFORM =~ /mswin/ or RUBY_PLATFORM =~ /mingw/
31
+ $testwise_screenshot_supported = false
32
+ begin
33
+ require 'win32/screenshot'
34
+ $testwise_screenshot_supported = true
35
+ rescue LoadError => no_screen_library_error
36
+ end
28
37
  end
29
38
 
30
39
  # Extra full path to load libraries
@@ -24,7 +24,7 @@ module FireWatir
24
24
  end
25
25
 
26
26
  case os
27
- when /mswin/
27
+ when /mswin/ || /mingw/
28
28
  begin
29
29
  # Get the path to Firefox.exe using Registry.
30
30
  require 'win32/registry.rb'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rwebspec
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 53
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 7
8
+ - 8
9
9
  - 1
10
- version: 1.7.1
10
+ version: 1.8.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Zhimin Zhan
@@ -15,7 +15,7 @@ autorequire: rwebspec
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-19 00:00:00 +10:00
18
+ date: 2011-05-28 00:00:00 +10:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -42,16 +42,16 @@ dependencies:
42
42
  requirements:
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
- hash: 55
45
+ hash: 53
46
46
  segments:
47
47
  - 1
48
48
  - 8
49
- - 0
50
- version: 1.8.0
49
+ - 1
50
+ version: 1.8.1
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
53
  description:
54
- email: zhimin@agileway.net
54
+ email: zhimin@agileway.com.au
55
55
  executables: []
56
56
 
57
57
  extensions: []