testcentricity_web 2.1.8.2 → 2.1.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +27 -0
  3. data/.rubocop.yml +41 -0
  4. data/.yardopts +2 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE.txt +28 -0
  7. data/README.md +1438 -0
  8. data/Rakefile +1 -0
  9. data/lib/devices/devices.yml +280 -0
  10. data/lib/testcentricity_web.rb +140 -0
  11. data/lib/testcentricity_web/browser_helper.rb +173 -0
  12. data/lib/testcentricity_web/data_objects_helper.rb +78 -0
  13. data/lib/testcentricity_web/drag_drop_helper.rb +15 -0
  14. data/lib/testcentricity_web/elements/button.rb +8 -0
  15. data/lib/testcentricity_web/elements/cell_button.rb +8 -0
  16. data/lib/testcentricity_web/elements/cell_checkbox.rb +38 -0
  17. data/lib/testcentricity_web/elements/cell_element.rb +62 -0
  18. data/lib/testcentricity_web/elements/cell_image.rb +8 -0
  19. data/lib/testcentricity_web/elements/cell_radio.rb +31 -0
  20. data/lib/testcentricity_web/elements/checkbox.rb +99 -0
  21. data/lib/testcentricity_web/elements/file_field.rb +45 -0
  22. data/lib/testcentricity_web/elements/image.rb +34 -0
  23. data/lib/testcentricity_web/elements/label.rb +8 -0
  24. data/lib/testcentricity_web/elements/link.rb +8 -0
  25. data/lib/testcentricity_web/elements/list.rb +54 -0
  26. data/lib/testcentricity_web/elements/list_button.rb +8 -0
  27. data/lib/testcentricity_web/elements/list_checkbox.rb +38 -0
  28. data/lib/testcentricity_web/elements/list_element.rb +51 -0
  29. data/lib/testcentricity_web/elements/list_radio.rb +31 -0
  30. data/lib/testcentricity_web/elements/radio.rb +73 -0
  31. data/lib/testcentricity_web/elements/select_list.rb +189 -0
  32. data/lib/testcentricity_web/elements/table.rb +473 -0
  33. data/lib/testcentricity_web/elements/textfield.rb +84 -0
  34. data/lib/testcentricity_web/environment.rb +249 -0
  35. data/lib/testcentricity_web/excel_helper.rb +242 -0
  36. data/lib/testcentricity_web/exception_queue_helper.rb +47 -0
  37. data/lib/testcentricity_web/page_objects_helper.rb +656 -0
  38. data/lib/testcentricity_web/page_sections_helper.rb +811 -0
  39. data/lib/testcentricity_web/siebel_open_ui_helper.rb +15 -0
  40. data/lib/testcentricity_web/ui_elements_helper.rb +425 -0
  41. data/lib/testcentricity_web/utility_helpers.rb +28 -0
  42. data/lib/testcentricity_web/version.rb +3 -0
  43. data/lib/testcentricity_web/webdriver_helper.rb +451 -0
  44. data/lib/testcentricity_web/world_extensions.rb +26 -0
  45. data/testcentricity_web.gemspec +42 -0
  46. metadata +52 -4
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,280 @@
1
+ :iphone:
2
+ :name: "iPhone"
3
+ :os: "ios"
4
+ :css_width: 320
5
+ :css_height: 480
6
+ :default_orientation: portrait
7
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
8
+ :iphone4:
9
+ :name: "iPhone 4"
10
+ :os: "ios"
11
+ :css_width: 320
12
+ :css_height: 480
13
+ :default_orientation: portrait
14
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
15
+ :iphone5:
16
+ :name: "iPhone 5"
17
+ :os: "ios"
18
+ :css_width: 320
19
+ :css_height: 568
20
+ :default_orientation: portrait
21
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
22
+ :iphone6:
23
+ :name: "iPhone 6"
24
+ :os: "ios"
25
+ :css_width: 375
26
+ :css_height: 667
27
+ :default_orientation: portrait
28
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
29
+ :iphone6_plus:
30
+ :name: "iPhone 6 Plus"
31
+ :os: "ios"
32
+ :css_width: 414
33
+ :css_height: 736
34
+ :default_orientation: portrait
35
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
36
+ :iphone7:
37
+ :name: "iPhone 7"
38
+ :os: "ios"
39
+ :css_width: 375
40
+ :css_height: 667
41
+ :default_orientation: portrait
42
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602.1"
43
+ :iphone7_plus:
44
+ :name: "iPhone 7 Plus"
45
+ :os: "ios"
46
+ :css_width: 414
47
+ :css_height: 736
48
+ :default_orientation: portrait
49
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602.1"
50
+ :iphone7_chrome:
51
+ :name: "iPhone 7 - Chrome"
52
+ :os: "ios"
53
+ :css_width: 375
54
+ :css_height: 667
55
+ :default_orientation: portrait
56
+ :user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
57
+ :iphone8:
58
+ :name: "iPhone 8"
59
+ :os: "ios"
60
+ :css_width: 375
61
+ :css_height: 667
62
+ :default_orientation: portrait
63
+ :user_agent: "Mozilla/5.0 (iPhone; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
64
+ :iphone8_plus:
65
+ :name: "iPhone 8 Plus"
66
+ :os: "ios"
67
+ :css_width: 414
68
+ :css_height: 736
69
+ :default_orientation: portrait
70
+ :user_agent: "Mozilla/5.0 (iPhone; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
71
+ :iphonex:
72
+ :name: "iPhone X"
73
+ :os: "ios"
74
+ :css_width: 375
75
+ :css_height: 812
76
+ :default_orientation: portrait
77
+ :user_agent: "Mozilla/5.0 (iPhone; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
78
+ :android_phone:
79
+ :name: "Generic Android phone"
80
+ :os: "android"
81
+ :css_width: 320
82
+ :css_height: 480
83
+ :default_orientation: portrait
84
+ :user_agent: "Mozilla/5.0 (Linux; U; Android 4.0.1; en-us; sdk Build/ICS_MR0) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"
85
+ nexus6:
86
+ :name: "Nexus 6 or 6P phone"
87
+ :os: "android"
88
+ :css_width: 411
89
+ :css_height: 731
90
+ :default_orientation: portrait
91
+ :user_agent: "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36"
92
+ :samsung_galaxy_s4:
93
+ :name: "Samsung Galaxy S4"
94
+ :os: "android"
95
+ :css_width: 360
96
+ :css_height: 640
97
+ :default_orientation: portrait
98
+ :user_agent: "Mozilla/5.0 (Linux; Android 5.0.1; SAMSUNG SCH-I545 4G Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/34.0.1847.76 Mobile Safari/537.36"
99
+ :samsung_galaxy_s5:
100
+ :name: "Samsung Galaxy S5"
101
+ :os: "android"
102
+ :css_width: 360
103
+ :css_height: 640
104
+ :default_orientation: portrait
105
+ :user_agent: "Mozilla/5.0 (Linux; Android 6.0.1; SM-G900V Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36"
106
+ :samsung_galaxy_s6:
107
+ :name: "Samsung Galaxy S6 Edge"
108
+ :os: "android"
109
+ :css_width: 360
110
+ :css_height: 640
111
+ :default_orientation: portrait
112
+ :user_agent: "Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G925F Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36"
113
+ :pixel:
114
+ :name: "Google Pixel phone"
115
+ :os: "android"
116
+ :css_width: 411
117
+ :css_height: 731
118
+ :default_orientation: portrait
119
+ :user_agent: "Mozilla/5.0 (Linux; Android 8.0.0; Pixel Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.66 Mobile Safari/537.36"
120
+ :pixel_xl:
121
+ :name: "Google Pixel XL phone"
122
+ :os: "android"
123
+ :css_width: 411
124
+ :css_height: 731
125
+ :default_orientation: portrait
126
+ :user_agent: "Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36"
127
+ :windows_phone8:
128
+ :name: "Generic Windows 8 phone"
129
+ :os: "windows"
130
+ :css_width: 320
131
+ :css_height: 480
132
+ :default_orientation: portrait
133
+ :user_agent: "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)"
134
+ :windows_phone7:
135
+ :name: "Generic Windows 7 phone"
136
+ :os: "windows"
137
+ :css_width: 320
138
+ :css_height: 480
139
+ :default_orientation: portrait
140
+ :user_agent: "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710)"
141
+ :lumia_950_xl:
142
+ :name: "Microsoft Lumia 950 XL"
143
+ :os: "windows"
144
+ :css_width: 360
145
+ :css_height: 640
146
+ :default_orientation: portrait
147
+ :user_agent: "Mozilla/5.0 (Windows Phone 10.0; Android 4.2; Microsoft; Lumia 950 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10240"
148
+ :blackberry_z10:
149
+ :name: "Blackberry Z10"
150
+ :os: "blackberry"
151
+ :css_width: 384
152
+ :css_height: 640
153
+ :default_orientation: portrait
154
+ :user_agent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+"
155
+ :blackberry_z30:
156
+ :name: "Blackberry Z30"
157
+ :os: "blackberry"
158
+ :css_width: 360
159
+ :css_height: 640
160
+ :default_orientation: portrait
161
+ :user_agent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+"
162
+ :blackberry_leap:
163
+ :name: "Blackberry Leap"
164
+ :os: "blackberry"
165
+ :css_width: 360
166
+ :css_height: 640
167
+ :default_orientation: portrait
168
+ :user_agent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.35+ (KHTML, like Gecko) Version/10.2.0.1791 Mobile Safari/537.35+"
169
+ :ipad:
170
+ :name: "iPad"
171
+ :os: "ios"
172
+ :css_width: 1024
173
+ :css_height: 768
174
+ :default_orientation: landscape
175
+ :user_agent: "Mozilla/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602.1"
176
+ :ipad_pro:
177
+ :name: "iPad Pro"
178
+ :os: "ios"
179
+ :css_width: 1366
180
+ :css_height: 1024
181
+ :default_orientation: landscape
182
+ :user_agent: "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
183
+ :ipad_pro_10_5:
184
+ :name: "iPad Pro 10.5 in."
185
+ :os: "ios"
186
+ :css_width: 1112
187
+ :css_height: 834
188
+ :default_orientation: landscape
189
+ :user_agent: "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
190
+ :ipad_chrome:
191
+ :name: "iPad - Chrome"
192
+ :os: "ios"
193
+ :css_width: 1024
194
+ :css_height: 768
195
+ :default_orientation: landscape
196
+ :user_agent: "Mozilla/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
197
+ :android_tablet:
198
+ :name: "Generic Android tablet"
199
+ :os: "android"
200
+ :css_width: 1024
201
+ :css_height: 768
202
+ :default_orientation: landscape
203
+ :user_agent: "Mozilla/5.0 (Linux; U; Android 3.0; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13"
204
+ :kindle_fire:
205
+ :name: "Kindle Fire"
206
+ :os: "kindle"
207
+ :css_width: 1024
208
+ :css_height: 600
209
+ :default_orientation: landscape
210
+ :user_agent: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.141.16-Gen4_11004310) AppleWebkit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true"
211
+ :kindle_firehd7:
212
+ :name: "Kindle Fire HD 7"
213
+ :os: "kindle"
214
+ :css_width: 800
215
+ :css_height: 480
216
+ :default_orientation: landscape
217
+ :user_agent: "Mozilla/5.0 (Linux; U; en-us; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true"
218
+ :kindle_firehd8:
219
+ :name: "Kindle Fire HD 8 or 9"
220
+ :os: "kindle"
221
+ :css_width: 1280
222
+ :css_height: 800
223
+ :default_orientation: landscape
224
+ :user_agent: "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true"
225
+ :kindle_firehd10:
226
+ :name: "Kindle Fire HD 10"
227
+ :os: "kindle"
228
+ :css_width: 1920
229
+ :css_height: 1200
230
+ :default_orientation: landscape
231
+ :user_agent: "Mozilla/5.0 (Linux; Android 5.1.1; KFTBWI Build/LMY47O) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/41.51020.2250.0238 Safari/537.36"
232
+ :surface:
233
+ :name: "Microsoft Surface"
234
+ :os: "windows"
235
+ :css_width: 1366
236
+ :css_height: 768
237
+ :default_orientation: landscape
238
+ :user_agent: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)"
239
+ :blackberry_playbook:
240
+ :name: "Blackberry Playbook"
241
+ :os: "blackberry"
242
+ :css_width: 1024
243
+ :css_height: 600
244
+ :default_orientation: landscape
245
+ :user_agent: "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+"
246
+ :blackberry_passport:
247
+ :name: "Blackberry Passport"
248
+ :os: "blackberry"
249
+ :css_width: 504
250
+ :css_height: 504
251
+ :default_orientation: portrait
252
+ :user_agent: "Mozilla/5.0 (Linux; U; Android 4.3; en-us; Passport Build/10.3.2.148) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
253
+ :samsung_galaxy_tab:
254
+ :name: "Samsung Galaxy Tab series"
255
+ :os: "android"
256
+ :css_width: 1280
257
+ :css_height: 800
258
+ :default_orientation: landscape
259
+ :user_agent: "Mozilla/5.0 (Linux; Android 4.0.4; GT-P6800 Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36"
260
+ :google_nexus7:
261
+ :name: "Nexus 7 series"
262
+ :os: "android"
263
+ :css_width: 960
264
+ :css_height: 600
265
+ :default_orientation: landscape
266
+ :user_agent: "Mozilla/5.0 (Linux; Android 4.4.4; Nexus 7 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36"
267
+ :google_nexus9:
268
+ :name: "Nexus 9 series"
269
+ :os: "android"
270
+ :css_width: 1024
271
+ :css_height: 768
272
+ :default_orientation: landscape
273
+ :user_agent: "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 9 Build/LMY48I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Safari/537.36"
274
+ :google_nexus10:
275
+ :name: "Nexus 10 series"
276
+ :os: "android"
277
+ :css_width: 1280
278
+ :css_height: 800
279
+ :default_orientation: landscape
280
+ :user_agent: "Mozilla/5.0 (Linux; Android 5.1; Nexus 10 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.109 Safari/537.36"
@@ -0,0 +1,140 @@
1
+ require 'capybara/cucumber'
2
+ require 'test/unit'
3
+ require 'capybara/poltergeist'
4
+
5
+ require 'testcentricity_web/world_extensions'
6
+ require 'testcentricity_web/browser_helper'
7
+ require 'testcentricity_web/data_objects_helper'
8
+ require 'testcentricity_web/drag_drop_helper'
9
+ require 'testcentricity_web/excel_helper'
10
+ require 'testcentricity_web/exception_queue_helper'
11
+ require 'testcentricity_web/page_objects_helper'
12
+ require 'testcentricity_web/page_sections_helper'
13
+ require 'testcentricity_web/siebel_open_ui_helper'
14
+ require 'testcentricity_web/ui_elements_helper'
15
+ require 'testcentricity_web/utility_helpers'
16
+ require 'testcentricity_web/environment'
17
+ require 'testcentricity_web/webdriver_helper'
18
+ require 'testcentricity_web/version'
19
+
20
+ require 'testcentricity_web/elements/button'
21
+ require 'testcentricity_web/elements/checkbox'
22
+ require 'testcentricity_web/elements/file_field'
23
+ require 'testcentricity_web/elements/image'
24
+ require 'testcentricity_web/elements/label'
25
+ require 'testcentricity_web/elements/link'
26
+ require 'testcentricity_web/elements/radio'
27
+ require 'testcentricity_web/elements/select_list'
28
+ require 'testcentricity_web/elements/list'
29
+ require 'testcentricity_web/elements/table'
30
+ require 'testcentricity_web/elements/textfield'
31
+ require 'testcentricity_web/elements/cell_element'
32
+ require 'testcentricity_web/elements/cell_button'
33
+ require 'testcentricity_web/elements/cell_checkbox'
34
+ require 'testcentricity_web/elements/cell_radio'
35
+ require 'testcentricity_web/elements/cell_image'
36
+ require 'testcentricity_web/elements/list_element'
37
+ require 'testcentricity_web/elements/list_button'
38
+ require 'testcentricity_web/elements/list_checkbox'
39
+ require 'testcentricity_web/elements/list_radio'
40
+
41
+ module TestCentricity
42
+ class PageManager
43
+ attr_accessor :current_page
44
+
45
+ @page_objects = {}
46
+
47
+ def self.register_page_objects(pages)
48
+ result = ''
49
+ pages.each do |page_object, page_class|
50
+ obj = page_class.new
51
+ @page_objects[page_object] = obj unless @page_objects.has_key?(page_object)
52
+ page_names = obj.page_name
53
+ page_names = Array(page_names) if page_names.is_a? String
54
+ page_names.each do |name|
55
+ page_key = name.gsub(/\s+/, '').downcase.to_sym
56
+ if page_key != page_object
57
+ @page_objects[page_key] = obj unless @page_objects.has_key?(page_key)
58
+ end
59
+ result = "#{result}def #{page_object};@#{page_object} ||= TestCentricity::PageManager.find_page(:#{page_object});end;"
60
+ end
61
+ end
62
+ result
63
+ end
64
+
65
+ # Have all PageObjects been registered?
66
+ #
67
+ # @return [Boolean] true if all PageObjects have been registered
68
+ # @example
69
+ # TestCentricity::PageManager.loaded?
70
+ #
71
+ def self.loaded?
72
+ !@page_objects.empty?
73
+ end
74
+
75
+ def self.find_page(page_name)
76
+ (page_name.is_a? String) ? page_id = page_name.gsub(/\s+/, '').downcase.to_sym : page_id = page_name
77
+ @page_objects[page_id]
78
+ end
79
+
80
+ # Get the currently active PageObject
81
+ #
82
+ # @return [PageObject]
83
+ # @example
84
+ # active_page = TestCentricity::PageManager.current_page
85
+ #
86
+ def self.current_page
87
+ @current_page
88
+ end
89
+
90
+ # Sets the currently active PageObject
91
+ #
92
+ # @param page [PageObject] Reference to the active PageObject
93
+ # @example
94
+ # TestCentricity::PageManager.current_page = product_search_page
95
+ #
96
+ def self.current_page=(page)
97
+ @current_page = page
98
+ end
99
+
100
+ # Sets the currently active PageObject
101
+ #
102
+ # @param page [PageObject] Reference to the active PageObject
103
+ # @example
104
+ # TestCentricity::PageManager.set_current_page(product_search_page)
105
+ #
106
+ # @deprecated Please use {#current_page=} instead
107
+ def self.set_current_page(page)
108
+ warn "[DEPRECATION] 'TestCentricity::PageManager.set_current_page' is deprecated. Please use 'current_page=' instead."
109
+ @current_page = page
110
+ end
111
+ end
112
+
113
+
114
+ class DataManager
115
+ @data_objects = {}
116
+
117
+ def self.register_data_objects(data)
118
+ result = ''
119
+ data.each do |data_type, data_class|
120
+ @data_objects[data_type] = data_class.new unless @data_objects.has_key?(data_type)
121
+ result = "#{result}def #{data_type};@#{data_type} ||= TestCentricity::DataManager.find_data_object(:#{data_type});end;"
122
+ end
123
+ result
124
+ end
125
+
126
+ def self.find_data_object(data_object)
127
+ @data_objects[data_object]
128
+ end
129
+
130
+ # Have all DataObjects been registered?
131
+ #
132
+ # @return [Boolean] true if all DataObjects have been registered
133
+ # @example
134
+ # TestCentricity::DataManager.loaded?
135
+ #
136
+ def self.loaded?
137
+ !@data_objects.empty?
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,173 @@
1
+ require 'yaml'
2
+
3
+
4
+ module TestCentricity
5
+ module Browsers
6
+ include Capybara::DSL
7
+
8
+ # Sets the size of the browser window.
9
+ #
10
+ # @param resolution [Array] the desired [width, height]
11
+ # @example
12
+ # Browsers.set_browser_window_size([1024, 768])
13
+ #
14
+ def self.set_browser_window_size(resolution)
15
+ resolution = resolution.split(',') if resolution.is_a?(String)
16
+ window = Capybara.current_session.driver.browser.manage.window
17
+ window.resize_to(resolution[0], resolution[1])
18
+ Environ.browser_size = [resolution[0].to_i, resolution[1].to_i]
19
+ end
20
+
21
+ # Maximizes the selenium browser window.
22
+ #
23
+ # @example
24
+ # Browsers.maximize_browser
25
+ #
26
+ def self.maximize_browser
27
+ window = Capybara.current_session.driver.browser.manage.window
28
+ window.maximize
29
+ end
30
+ # Sets the position of the browser window.
31
+ #
32
+ # @param x [Integer] the desired x coordinate
33
+ # @param y [Integer] the desired y coordinate
34
+ # @example
35
+ # Browsers.set_browser_window_position([100, 300])
36
+ #
37
+ def self.set_browser_window_position(x, y)
38
+ window = Capybara.current_session.driver.browser.manage.window
39
+ window.move_to(x, y)
40
+ end
41
+
42
+ # Refreshes the selenium browser.
43
+ #
44
+ # @example
45
+ # Browsers.refresh_browser
46
+ #
47
+ def self.refresh_browser
48
+ Capybara.page.driver.browser.navigate.refresh
49
+ end
50
+
51
+ # Emulates clicking the web browser's Back button. Navigates back by one page on the browser’s history.
52
+ #
53
+ # @example
54
+ # Browsers.navigate_back
55
+ #
56
+ def self.navigate_back
57
+ Capybara.page.driver.browser.navigate.back
58
+ end
59
+
60
+ # Emulates clicking the web browser's Forward button. Navigates forward by one page on the browser’s history.
61
+ #
62
+ # @example
63
+ # Browsers.navigate_forward
64
+ #
65
+ def self.navigate_forward
66
+ Capybara.page.driver.browser.navigate.forward
67
+ end
68
+
69
+ def self.switch_to_new_browser_instance
70
+ Capybara.page.driver.browser.switch_to.window(Capybara.page.driver.browser.window_handles.last)
71
+ end
72
+
73
+ def self.close_all_browser_instances
74
+ Capybara.page.driver.browser.window_handles.each do |handle|
75
+ page.driver.browser.switch_to.window(handle)
76
+ page.driver.browser.close
77
+ end
78
+ end
79
+
80
+ def self.num_browser_instances
81
+ Capybara.page.driver.browser.window_handles.count
82
+ end
83
+
84
+ def self.close_current_browser_instance
85
+ Capybara.page.driver.browser.close
86
+ Capybara.page.driver.browser.switch_to.window(Capybara.page.driver.browser.window_handles.last)
87
+ end
88
+
89
+ def self.close_old_browser_instance
90
+ Capybara.page.driver.browser.switch_to.window(Capybara.page.driver.browser.window_handles.first)
91
+ Capybara.page.driver.browser.close
92
+ Capybara.page.driver.browser.switch_to.window(Capybara.page.driver.browser.window_handles.last)
93
+ end
94
+
95
+ def self.close_named_browser_instance(name)
96
+ Capybara.page.driver.browser.switch_to.window(Capybara.page.driver.find_window(name))
97
+ Capybara.page.driver.browser.close
98
+ Capybara.page.driver.browser.switch_to.window(Capybara.page.driver.browser.window_handles.last)
99
+ end
100
+
101
+ def self.suppress_js_alerts
102
+ Capybara.page.execute_script('window.alert = function() {}')
103
+ end
104
+
105
+ def self.suppress_js_leave_page_modal
106
+ Capybara.page.execute_script('window.onbeforeunload = null')
107
+ end
108
+
109
+ def self.delete_all_cookies
110
+ if Capybara.current_driver == :selenium
111
+ browser = Capybara.current_session.driver.browser
112
+ if browser.respond_to?(:manage) && browser.manage.respond_to?(:delete_all_cookies)
113
+ browser.manage.delete_all_cookies
114
+ else
115
+ raise 'Could not clear cookies.'
116
+ end
117
+ end
118
+ end
119
+
120
+ def self.set_device_orientation(orientation)
121
+ if Environ.is_mobile? && !Environ.is_device?
122
+ Browsers.set_browser_window_size(Browsers.browser_size(Environ.browser.to_s, orientation))
123
+ else
124
+ puts '***** Cannot change device orientation of desktop web browsers or remote devices *****'
125
+ end
126
+ end
127
+
128
+ def self.mobile_device_agent(device)
129
+ device_name = device.gsub(/\s+/, '').downcase.to_sym
130
+ device = get_devices[device_name]
131
+ agent_string = device[:user_agent]
132
+ raise "Device '#{device}' is not defined" unless agent_string
133
+ agent_string
134
+ end
135
+
136
+ def self.mobile_device_name(device)
137
+ device_name = device.gsub(/\s+/, '').downcase.to_sym
138
+ device = get_devices[device_name]
139
+ name = device[:name]
140
+ raise "Device '#{device}' is not defined" unless name
141
+ Environ.device_os = device[:os]
142
+ name
143
+ end
144
+
145
+ def self.browser_size(browser, orientation)
146
+ device_name = browser.gsub(/\s+/, '').downcase.to_sym
147
+ device = get_devices[device_name]
148
+ if device
149
+ width = device[:css_width]
150
+ height = device[:css_height]
151
+ default_orientation = device[:default_orientation].to_sym
152
+ if orientation
153
+ Environ.device_orientation = orientation
154
+ orientation.downcase.to_sym == default_orientation ?
155
+ size = [width, height] :
156
+ size = [height, width]
157
+ else
158
+ Environ.device_orientation = device[:default_orientation]
159
+ size = [width, height]
160
+ end
161
+ else
162
+ size = [1650, 1000]
163
+ end
164
+ size
165
+ end
166
+
167
+ private
168
+
169
+ def self.get_devices
170
+ YAML.load_file File.expand_path('../../devices/devices.yml', __FILE__)
171
+ end
172
+ end
173
+ end