rwebspec-webdriver 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,6 +1,11 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ == 0.3
5
+
6
+ * move fail_safe, try_until, take_screenshot from driver to test_utils.rb
7
+
8
+
4
9
  == 0.2.1
5
10
  * add sum_of, average_of to overidding Array methods
6
11
 
data/Rakefile CHANGED
@@ -69,7 +69,7 @@ end
69
69
  spec = Gem::Specification.new do |s|
70
70
  s.platform= Gem::Platform::RUBY
71
71
  s.name = "rwebspec-webdriver"
72
- s.version = "0.2.1"
72
+ s.version = "0.3.0"
73
73
  s.summary = "Executable functional specification for web applications in RSpec syntax and Selenium-WebDriver"
74
74
  # s.description = ""
75
75
 
@@ -127,6 +127,7 @@ module RWebSpec
127
127
  #
128
128
  def close_all_browsers
129
129
  #TODO
130
+ close_browser
130
131
  end
131
132
 
132
133
  # Verify the next page following an operation.
@@ -590,59 +591,7 @@ module RWebSpec
590
591
  #= Convenient functions
591
592
  #
592
593
 
593
- # Using Ruby block syntax to create interesting domain specific language,
594
- # may be appeal to someone.
595
-
596
- # Example:
597
- # on @page do |i|
598
- # i.enter_text('btn1')
599
- # i.click_button('btn1')
600
- # end
601
- def on(page, & block)
602
- yield page
603
- end
604
-
605
- # fail the test if user can perform the operation
606
- #
607
- # Example:
608
- # shall_not_allow { 1/0 }
609
- def shall_not_allow(& block)
610
- operation_performed_ok = false
611
- begin
612
- yield
613
- operation_performed_ok = true
614
- rescue
615
- end
616
- raise "Operation shall not be allowed" if operation_performed_ok
617
- end
618
-
619
- alias do_not_allow shall_not_allow
620
-
621
- # Does not provide real function, other than make enhancing test syntax
622
- #
623
- # Example:
624
- # allow { click_button('Register') }
625
- def allow(& block)
626
- yield
627
- end
628
-
629
- alias shall_allow allow
630
- alias allowing allow
631
-
632
- # try operation, ignore if errors occur
633
- #
634
- # Example:
635
- # failsafe { click_link("Logout") } # try logout, but it still OK if not being able to (already logout))
636
- def failsafe(& block)
637
- begin
638
- yield
639
- rescue =>e
640
- end
641
- end
642
-
643
- alias fail_safe failsafe
644
-
645
-
594
+
646
595
  # Execute the provided block until either (1) it returns true, or
647
596
  # (2) the timeout (in seconds) has been reached. If the timeout is reached,
648
597
  # a TimeOutException will be raised. The block will always
@@ -749,84 +698,6 @@ module RWebSpec
749
698
 
750
699
  =end
751
700
 
752
- # Try the operation up to specified times, and sleep given interval (in seconds)
753
- # Error will be ignored until timeout
754
- # Example
755
- # repeat_try(3, 2) { click_button('Search' } # 3 times, 6 seconds in total
756
- # repeat_try { click_button('Search' } # using default 5 tries, 2 second interval
757
- def repeat_try(num_tries = @@default_timeout || 30, interval = @@default_polling_interval || 1, & block)
758
- num_tries ||= 1
759
- (num_tries - 1).times do |num|
760
- begin
761
- yield
762
- return
763
- rescue => e
764
- # puts "debug: #{num} failed: #{e}"
765
- sleep interval
766
- end
767
- end
768
-
769
- # last try, throw error if still fails
770
- begin
771
- yield
772
- rescue => e
773
- raise e.to_s + " after trying #{num_tries} times every #{interval} seconds"
774
- end
775
- yield
776
- end
777
-
778
- # TODO: syntax
779
-
780
- # Try the operation up to specified timeout (in seconds), and sleep given interval (in seconds).
781
- # Error will be ignored until timeout
782
- # Example
783
- # try { click_link('waiting')}
784
- # try(10, 2) { click_button('Search' } # try to click the 'Search' button upto 10 seconds, try every 2 seconds
785
- # try { click_button('Search' }
786
- def try_until(timeout = @@default_timeout, polling_interval = @@default_polling_interval || 1, & block)
787
- start_time = Time.now
788
-
789
- last_error = nil
790
- until (duration = Time.now - start_time) > timeout
791
- begin
792
- return if yield
793
- last_error = nil
794
- rescue => e
795
- last_error = e
796
- end
797
- sleep polling_interval
798
- end
799
-
800
- raise "Timeout after #{duration.to_i} seconds with error: #{last_error}." if last_error
801
- raise "Timeout after #{duration.to_i} seconds."
802
- end
803
-
804
- alias try_upto try_until
805
-
806
- def try(timeout = @@default_timeout, polling_interval = @@default_polling_interval || 1, &block)
807
- puts "Warning: method 'try' is deprecated (won't support in RWebSpec 3), use try_until instead."
808
- try_until(timeout, polling_interval) {
809
- yield
810
- }
811
- end
812
-
813
- ##
814
- # Convert :first to 1, :second to 2, and so on...
815
- def symbol_to_sequence(symb)
816
- value = {:zero => 0,
817
- :first => 1,
818
- :second => 2,
819
- :third => 3,
820
- :fourth => 4,
821
- :fifth => 5,
822
- :sixth => 6,
823
- :seventh => 7,
824
- :eighth => 8,
825
- :ninth => 9,
826
- :tenth => 10}[symb]
827
- return value || symb.to_i
828
- end
829
-
830
701
  # Clear popup windows such as 'Security Alert' or 'Security Information' popup window,
831
702
  #
832
703
  # Screenshot see http://kb2.adobe.com/cps/165/tn_16588.html
@@ -966,32 +837,6 @@ module RWebSpec
966
837
  end
967
838
 
968
839
 
969
- # use win32screenshot library to save curernt active window, which shall be IE
970
- #
971
- def take_screenshot
972
- if $testwise_screenshot_supported && is_windows?
973
- begin
974
- screenshot_image_filename = "screenshot_" + Time.now.strftime("%m%d%H%M%S") + ".jpg"
975
- the_dump_dir = default_dump_dir
976
- FileUtils.mkdir_p(the_dump_dir) unless File.exists?(the_dump_dir)
977
- screenshot_image_filepath = File.join(the_dump_dir, screenshot_image_filename)
978
- screenshot_image_filepath.gsub!("/", "\\") if is_windows?
979
-
980
- FileUtils.rm_f(screenshot_image_filepath) if File.exist?(screenshot_image_filepath)
981
-
982
- case @web_browser.underlying_browser.browser
983
- when :internet_explorer
984
- Win32::Screenshot::Take.of(:window, :title => /internet\sexplorer/i).write(screenshot_image_filepath)
985
- else
986
- Win32::Screenshot::Take.of(:foreground).write(screenshot_image_filepath)
987
- end
988
- notify_screenshot_location(screenshot_image_filepath)
989
- rescue => e
990
- puts "error on taking screenshot: #{e}"
991
- end
992
- end
993
- end
994
-
995
840
  end
996
841
 
997
842
  end
@@ -9,6 +9,167 @@ module RWebSpec
9
9
  module WebDriver
10
10
  module Utils
11
11
 
12
+ @@default_polling_interval = 1 # second
13
+ @@default_timeout = 30 # seconds
14
+
15
+ # Using Ruby block syntax to create interesting domain specific language,
16
+ # may be appeal to someone.
17
+
18
+ # Example:
19
+ # on @page do |i|
20
+ # i.enter_text('btn1')
21
+ # i.click_button('btn1')
22
+ # end
23
+ def on(page, & block)
24
+ yield page
25
+ end
26
+
27
+ # fail the test if user can perform the operation
28
+ #
29
+ # Example:
30
+ # shall_not_allow { 1/0 }
31
+ def shall_not_allow(& block)
32
+ operation_performed_ok = false
33
+ begin
34
+ yield
35
+ operation_performed_ok = true
36
+ rescue
37
+ end
38
+ raise "Operation shall not be allowed" if operation_performed_ok
39
+ end
40
+
41
+ alias do_not_allow shall_not_allow
42
+
43
+ # Does not provide real function, other than make enhancing test syntax
44
+ #
45
+ # Example:
46
+ # allow { click_button('Register') }
47
+ def allow(& block)
48
+ yield
49
+ end
50
+
51
+ alias shall_allow allow
52
+ alias allowing allow
53
+
54
+ # try operation, ignore if errors occur
55
+ #
56
+ # Example:
57
+ # failsafe { click_link("Logout") } # try logout, but it still OK if not being able to (already logout))
58
+ def failsafe(& block)
59
+ begin
60
+ yield
61
+ rescue =>e
62
+ end
63
+ end
64
+
65
+ alias fail_safe failsafe
66
+
67
+
68
+ # Try the operation up to specified times, and sleep given interval (in seconds)
69
+ # Error will be ignored until timeout
70
+ # Example
71
+ # repeat_try(3, 2) { click_button('Search' } # 3 times, 6 seconds in total
72
+ # repeat_try { click_button('Search' } # using default 5 tries, 2 second interval
73
+ def repeat_try(num_tries = @@default_timeout || 30, interval = @@default_polling_interval || 1, & block)
74
+ num_tries ||= 1
75
+ (num_tries - 1).times do |num|
76
+ begin
77
+ yield
78
+ return
79
+ rescue => e
80
+ # puts "debug: #{num} failed: #{e}"
81
+ sleep interval
82
+ end
83
+ end
84
+
85
+ # last try, throw error if still fails
86
+ begin
87
+ yield
88
+ rescue => e
89
+ raise e.to_s + " after trying #{num_tries} times every #{interval} seconds"
90
+ end
91
+ yield
92
+ end
93
+
94
+ # TODO: syntax
95
+
96
+ # Try the operation up to specified timeout (in seconds), and sleep given interval (in seconds).
97
+ # Error will be ignored until timeout
98
+ # Example
99
+ # try { click_link('waiting')}
100
+ # try(10, 2) { click_button('Search' } # try to click the 'Search' button upto 10 seconds, try every 2 seconds
101
+ # try { click_button('Search' }
102
+ def try_until(timeout = @@default_timeout, polling_interval = @@default_polling_interval || 1, & block)
103
+ start_time = Time.now
104
+
105
+ last_error = nil
106
+ until (duration = Time.now - start_time) > timeout
107
+ begin
108
+ return if yield
109
+ last_error = nil
110
+ rescue => e
111
+ last_error = e
112
+ end
113
+ sleep polling_interval
114
+ end
115
+
116
+ raise "Timeout after #{duration.to_i} seconds with error: #{last_error}." if last_error
117
+ raise "Timeout after #{duration.to_i} seconds."
118
+ end
119
+
120
+ alias try_upto try_until
121
+
122
+ def try(timeout = @@default_timeout, polling_interval = @@default_polling_interval || 1, &block)
123
+ puts "Warning: method 'try' is deprecated (won't support in RWebSpec 3), use try_until instead."
124
+ try_until(timeout, polling_interval) {
125
+ yield
126
+ }
127
+ end
128
+
129
+ ##
130
+ # Convert :first to 1, :second to 2, and so on...
131
+ def symbol_to_sequence(symb)
132
+ value = {:zero => 0,
133
+ :first => 1,
134
+ :second => 2,
135
+ :third => 3,
136
+ :fourth => 4,
137
+ :fifth => 5,
138
+ :sixth => 6,
139
+ :seventh => 7,
140
+ :eighth => 8,
141
+ :ninth => 9,
142
+ :tenth => 10}[symb]
143
+ return value || symb.to_i
144
+ end
145
+
146
+
147
+ # use win32screenshot library to save curernt active window, which shall be IE
148
+ #
149
+ def take_screenshot
150
+ if $testwise_screenshot_supported && is_windows?
151
+ begin
152
+ screenshot_image_filename = "screenshot_" + Time.now.strftime("%m%d%H%M%S") + ".jpg"
153
+ the_dump_dir = default_dump_dir
154
+ FileUtils.mkdir_p(the_dump_dir) unless File.exists?(the_dump_dir)
155
+ screenshot_image_filepath = File.join(the_dump_dir, screenshot_image_filename)
156
+ screenshot_image_filepath.gsub!("/", "\\") if is_windows?
157
+
158
+ FileUtils.rm_f(screenshot_image_filepath) if File.exist?(screenshot_image_filepath)
159
+
160
+ case @web_browser.underlying_browser.browser
161
+ when :internet_explorer
162
+ Win32::Screenshot::Take.of(:window, :title => /internet\sexplorer/i).write(screenshot_image_filepath)
163
+ else
164
+ Win32::Screenshot::Take.of(:foreground).write(screenshot_image_filepath)
165
+ end
166
+ notify_screenshot_location(screenshot_image_filepath)
167
+ rescue => e
168
+ puts "error on taking screenshot: #{e}"
169
+ end
170
+ end
171
+ end
172
+
12
173
  # default date format returned is 29/12/2007.
13
174
  # if supplied parameter is not '%m/%d/%Y' -> 12/29/2007
14
175
  # Otherwise, "2007-12-29", which is most approiate date format
@@ -35,7 +35,7 @@ module RWebSpec
35
35
  initialize_celerity_browser(base_url, options)
36
36
  when /mswin|windows|mingw/i
37
37
  options[:browser] ||= "ie"
38
- case options[:browser].to_s
38
+ case options[:browser].to_s.downcase
39
39
  when "firefox"
40
40
  initialize_firefox_browser(existing_browser, base_url, options)
41
41
  when "chrome"
@@ -17,7 +17,7 @@ require 'spec'
17
17
  require 'selenium-webdriver'
18
18
 
19
19
  unless defined? RWEBSPEC_WEBDRIVER_VERSION
20
- RWEBSPEC_WEBDRIVER_VERSION = "0.2.1"
20
+ RWEBSPEC_WEBDRIVER_VERSION = "0.3.0"
21
21
  end
22
22
 
23
23
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 2
8
- - 1
9
- version: 0.2.1
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Zhimin Zhan
@@ -14,7 +14,7 @@ autorequire: rwebspec-webdriver
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-12-29 00:00:00 +10:00
17
+ date: 2012-01-19 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency