testcentricity 2.4.3 → 3.0.2
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.
- checksums.yaml +5 -5
- data/.gitignore +29 -0
- data/.rspec +2 -1
- data/.rubocop.yml +38 -0
- data/.ruby-version +1 -1
- data/.simplecov +9 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +282 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/{LICENSE.txt → LICENSE.md} +3 -4
- data/README.md +938 -1384
- data/Rakefile +63 -1
- data/config/cucumber.yml +145 -0
- data/config/locales/en-US.yml +56 -0
- data/config/test_data/LOCAL_data.yml +11 -0
- data/config/test_data/data.yml +10 -0
- data/features/deep_links.feature +26 -0
- data/features/login.feature +30 -0
- data/features/navigation.feature +31 -0
- data/features/step_definitions/generic_steps.rb +72 -0
- data/features/support/android/screens/about_screen.rb +11 -0
- data/features/support/android/screens/base_app_screen.rb +29 -0
- data/features/support/android/screens/checkout_address_screen.rb +17 -0
- data/features/support/android/screens/checkout_payment_screen.rb +22 -0
- data/features/support/android/screens/login_screen.rb +18 -0
- data/features/support/android/screens/products_screen.rb +13 -0
- data/features/support/android/screens/saucebot_screen.rb +16 -0
- data/features/support/android/screens/webview_screen.rb +13 -0
- data/features/support/android/sections/nav_widgets/nav_menu.rb +39 -0
- data/features/support/env.rb +61 -0
- data/features/support/hooks.rb +135 -0
- data/features/support/ios/screens/about_screen.rb +11 -0
- data/features/support/ios/screens/base_app_screen.rb +19 -0
- data/features/support/ios/screens/checkout_address_screen.rb +17 -0
- data/features/support/ios/screens/checkout_payment_screen.rb +22 -0
- data/features/support/ios/screens/login_screen.rb +18 -0
- data/features/support/ios/screens/products_screen.rb +13 -0
- data/features/support/ios/screens/saucebot_screen.rb +16 -0
- data/features/support/ios/screens/webview_screen.rb +13 -0
- data/features/support/ios/sections/list_items/product_cell_item.rb +13 -0
- data/features/support/ios/sections/modals/base_modal.rb +23 -0
- data/features/support/ios/sections/modals/logout_modal.rb +6 -0
- data/features/support/ios/sections/modals/reset_app_state_modal.rb +6 -0
- data/features/support/ios/sections/nav_widgets/nav_bar.rb +31 -0
- data/features/support/ios/sections/nav_widgets/nav_menu.rb +41 -0
- data/features/support/shared_components/screens/base_app_screen.rb +31 -0
- data/features/support/shared_components/screens/checkout_address_screen.rb +17 -0
- data/features/support/shared_components/screens/checkout_payment_screen.rb +22 -0
- data/features/support/shared_components/screens/login_screen.rb +39 -0
- data/features/support/shared_components/screens/saucebot_screen.rb +17 -0
- data/features/support/shared_components/screens/webview_screen.rb +12 -0
- data/features/support/shared_components/sections/nav_menu.rb +58 -0
- data/features/support/world_data.rb +12 -0
- data/features/support/world_pages.rb +26 -0
- data/lib/testcentricity/app_core/appium_connect_helper.rb +343 -111
- data/lib/testcentricity/app_core/screen_object.rb +252 -0
- data/lib/testcentricity/app_core/screen_objects_helper.rb +29 -201
- data/lib/testcentricity/app_core/{screen_sections_helper.rb → screen_section.rb} +40 -105
- data/lib/testcentricity/app_elements/app_element_helper.rb +17 -8
- data/lib/testcentricity/app_elements/checkbox.rb +3 -3
- data/lib/testcentricity/data_objects/environment.rb +133 -39
- data/lib/testcentricity/version.rb +1 -1
- data/lib/testcentricity.rb +4 -129
- data/reports/.keep +1 -0
- data/spec/fixtures/page_object.rb +22 -0
- data/spec/fixtures/page_section_object.rb +21 -0
- data/spec/fixtures/screen_object.rb +16 -0
- data/spec/fixtures/screen_section_object.rb +16 -0
- data/spec/spec_helper.rb +28 -9
- data/spec/testcentricity/elements/button_spec.rb +18 -0
- data/spec/testcentricity/elements/checkbox_spec.rb +28 -0
- data/spec/testcentricity/elements/image_spec.rb +13 -0
- data/spec/testcentricity/elements/label_spec.rb +18 -0
- data/spec/testcentricity/elements/list_spec.rb +13 -0
- data/spec/testcentricity/elements/ui_element_spec.rb +72 -0
- data/spec/testcentricity/mobile/appium_connect_spec.rb +117 -0
- data/spec/testcentricity/mobile/screen_object_spec.rb +63 -0
- data/spec/testcentricity/mobile/screen_section_object_spec.rb +56 -0
- data/spec/testcentricity/version_spec.rb +7 -0
- data/spec/testcentricity/web/browser_spec.rb +41 -0
- data/spec/testcentricity/web/local_webdriver_spec.rb +86 -0
- data/spec/testcentricity/web/mobile_webdriver_spec.rb +123 -0
- data/spec/testcentricity/web/page_object_spec.rb +85 -0
- data/spec/testcentricity/web/page_section_object_spec.rb +72 -0
- data/testcentricity.gemspec +30 -27
- metadata +216 -119
- data/.ruby-gemset +0 -1
- data/Gemfile.lock +0 -93
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/lib/devices/devices.yml +0 -352
- data/lib/testcentricity/app_core/appium_server.rb +0 -69
- data/lib/testcentricity/browser_helper.rb +0 -174
- data/lib/testcentricity/data_objects/data_objects_helper.rb +0 -78
- data/lib/testcentricity/data_objects/excel_helper.rb +0 -242
- data/lib/testcentricity/exception_queue_helper.rb +0 -111
- data/lib/testcentricity/utility_helpers.rb +0 -32
- data/lib/testcentricity/web_core/drag_drop_helper.rb +0 -15
- data/lib/testcentricity/web_core/page_objects_helper.rb +0 -677
- data/lib/testcentricity/web_core/page_sections_helper.rb +0 -895
- data/lib/testcentricity/web_core/webdriver_helper.rb +0 -588
- data/lib/testcentricity/web_elements/button.rb +0 -8
- data/lib/testcentricity/web_elements/cell_button.rb +0 -8
- data/lib/testcentricity/web_elements/cell_checkbox.rb +0 -38
- data/lib/testcentricity/web_elements/cell_element.rb +0 -69
- data/lib/testcentricity/web_elements/cell_image.rb +0 -8
- data/lib/testcentricity/web_elements/cell_radio.rb +0 -31
- data/lib/testcentricity/web_elements/checkbox.rb +0 -100
- data/lib/testcentricity/web_elements/file_field.rb +0 -45
- data/lib/testcentricity/web_elements/image.rb +0 -34
- data/lib/testcentricity/web_elements/label.rb +0 -8
- data/lib/testcentricity/web_elements/link.rb +0 -8
- data/lib/testcentricity/web_elements/list.rb +0 -100
- data/lib/testcentricity/web_elements/list_button.rb +0 -8
- data/lib/testcentricity/web_elements/list_checkbox.rb +0 -38
- data/lib/testcentricity/web_elements/list_element.rb +0 -61
- data/lib/testcentricity/web_elements/list_radio.rb +0 -31
- data/lib/testcentricity/web_elements/radio.rb +0 -74
- data/lib/testcentricity/web_elements/select_list.rb +0 -208
- data/lib/testcentricity/web_elements/siebel_open_ui_helper.rb +0 -15
- data/lib/testcentricity/web_elements/table.rb +0 -612
- data/lib/testcentricity/web_elements/textfield.rb +0 -114
- data/lib/testcentricity/web_elements/ui_elements_helper.rb +0 -532
- data/lib/testcentricity/world_extensions.rb +0 -26
- data/my_templates/default/method_details/setup.rb +0 -3
- data/spec/testcentricity_spec.rb +0 -9
data/lib/devices/devices.yml
DELETED
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
:iphone:
|
|
2
|
-
:name: "iPhone"
|
|
3
|
-
:os: ios
|
|
4
|
-
:type: phone
|
|
5
|
-
:css_width: 320
|
|
6
|
-
:css_height: 480
|
|
7
|
-
:default_orientation: portrait
|
|
8
|
-
: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"
|
|
9
|
-
:iphone4:
|
|
10
|
-
:name: "iPhone 4"
|
|
11
|
-
:os: ios
|
|
12
|
-
:type: phone
|
|
13
|
-
:css_width: 320
|
|
14
|
-
:css_height: 480
|
|
15
|
-
:default_orientation: portrait
|
|
16
|
-
: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"
|
|
17
|
-
:iphone5:
|
|
18
|
-
:name: "iPhone 5"
|
|
19
|
-
:os: ios
|
|
20
|
-
:type: phone
|
|
21
|
-
:css_width: 320
|
|
22
|
-
:css_height: 568
|
|
23
|
-
:default_orientation: portrait
|
|
24
|
-
: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"
|
|
25
|
-
:iphone6:
|
|
26
|
-
:name: "iPhone 6"
|
|
27
|
-
:os: ios
|
|
28
|
-
:type: phone
|
|
29
|
-
:css_width: 375
|
|
30
|
-
:css_height: 667
|
|
31
|
-
:default_orientation: portrait
|
|
32
|
-
: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"
|
|
33
|
-
:iphone6_plus:
|
|
34
|
-
:name: "iPhone 6 Plus"
|
|
35
|
-
:os: ios
|
|
36
|
-
:type: phone
|
|
37
|
-
:css_width: 414
|
|
38
|
-
:css_height: 736
|
|
39
|
-
:default_orientation: portrait
|
|
40
|
-
: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"
|
|
41
|
-
:iphone7:
|
|
42
|
-
:name: "iPhone 7"
|
|
43
|
-
:os: ios
|
|
44
|
-
:type: phone
|
|
45
|
-
:css_width: 375
|
|
46
|
-
:css_height: 667
|
|
47
|
-
:default_orientation: portrait
|
|
48
|
-
: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"
|
|
49
|
-
:iphone7_plus:
|
|
50
|
-
:name: "iPhone 7 Plus"
|
|
51
|
-
:os: ios
|
|
52
|
-
:type: phone
|
|
53
|
-
:css_width: 414
|
|
54
|
-
:css_height: 736
|
|
55
|
-
:default_orientation: portrait
|
|
56
|
-
: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"
|
|
57
|
-
:iphone7_chrome:
|
|
58
|
-
:name: "iPhone 7 - Chrome"
|
|
59
|
-
:os: ios
|
|
60
|
-
:type: phone
|
|
61
|
-
:css_width: 375
|
|
62
|
-
:css_height: 667
|
|
63
|
-
:default_orientation: portrait
|
|
64
|
-
:user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/65.0.3325.152 Mobile/15E216 Safari/604.1"
|
|
65
|
-
:iphone7_firefox:
|
|
66
|
-
:name: "iPhone 7 - Firefox"
|
|
67
|
-
:os: ios
|
|
68
|
-
:type: phone
|
|
69
|
-
:css_width: 375
|
|
70
|
-
:css_height: 667
|
|
71
|
-
:default_orientation: portrait
|
|
72
|
-
:user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/11.0b9935 Mobile/15E216 Safari/605.1.15"
|
|
73
|
-
:iphone7_edge:
|
|
74
|
-
:name: "iPhone 7 - MS Edge"
|
|
75
|
-
:os: ios
|
|
76
|
-
:type: phone
|
|
77
|
-
:css_width: 375
|
|
78
|
-
:css_height: 667
|
|
79
|
-
:default_orientation: portrait
|
|
80
|
-
:user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 EdgiOS/41.13.0.0 Mobile/15E216 Safari/605.1.15"
|
|
81
|
-
:iphone8:
|
|
82
|
-
:name: "iPhone 8"
|
|
83
|
-
:os: ios
|
|
84
|
-
:type: phone
|
|
85
|
-
:css_width: 375
|
|
86
|
-
:css_height: 667
|
|
87
|
-
:default_orientation: portrait
|
|
88
|
-
: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"
|
|
89
|
-
:iphone8_plus:
|
|
90
|
-
:name: "iPhone 8 Plus"
|
|
91
|
-
:os: ios
|
|
92
|
-
:type: phone
|
|
93
|
-
:css_width: 414
|
|
94
|
-
:css_height: 736
|
|
95
|
-
:default_orientation: portrait
|
|
96
|
-
: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"
|
|
97
|
-
:iphonex:
|
|
98
|
-
:name: "iPhone X"
|
|
99
|
-
:os: ios
|
|
100
|
-
:type: phone
|
|
101
|
-
:css_width: 375
|
|
102
|
-
:css_height: 812
|
|
103
|
-
:default_orientation: portrait
|
|
104
|
-
: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"
|
|
105
|
-
:android_phone:
|
|
106
|
-
:name: "Generic Android phone"
|
|
107
|
-
:os: android
|
|
108
|
-
:type: phone
|
|
109
|
-
:css_width: 360
|
|
110
|
-
:css_height: 640
|
|
111
|
-
:default_orientation: portrait
|
|
112
|
-
:user_agent: "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"
|
|
113
|
-
nexus6:
|
|
114
|
-
:name: "Nexus 6 or 6P phone"
|
|
115
|
-
:os: android
|
|
116
|
-
:type: phone
|
|
117
|
-
:css_width: 411
|
|
118
|
-
:css_height: 731
|
|
119
|
-
:default_orientation: portrait
|
|
120
|
-
: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"
|
|
121
|
-
:samsung_galaxy_s4:
|
|
122
|
-
:name: "Samsung Galaxy S4"
|
|
123
|
-
:os: android
|
|
124
|
-
:type: phone
|
|
125
|
-
:css_width: 360
|
|
126
|
-
:css_height: 640
|
|
127
|
-
:default_orientation: portrait
|
|
128
|
-
: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"
|
|
129
|
-
:samsung_galaxy_s5:
|
|
130
|
-
:name: "Samsung Galaxy S5"
|
|
131
|
-
:os: android
|
|
132
|
-
:type: phone
|
|
133
|
-
:css_width: 360
|
|
134
|
-
:css_height: 640
|
|
135
|
-
:default_orientation: portrait
|
|
136
|
-
: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"
|
|
137
|
-
:samsung_galaxy_s6:
|
|
138
|
-
:name: "Samsung Galaxy S6 Edge"
|
|
139
|
-
:os: android
|
|
140
|
-
:type: phone
|
|
141
|
-
:css_width: 360
|
|
142
|
-
:css_height: 640
|
|
143
|
-
:default_orientation: portrait
|
|
144
|
-
: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"
|
|
145
|
-
:pixel:
|
|
146
|
-
:name: "Google Pixel phone"
|
|
147
|
-
:os: android
|
|
148
|
-
:type: phone
|
|
149
|
-
:css_width: 411
|
|
150
|
-
:css_height: 731
|
|
151
|
-
:default_orientation: portrait
|
|
152
|
-
: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"
|
|
153
|
-
:pixel_xl:
|
|
154
|
-
:name: "Google Pixel XL phone"
|
|
155
|
-
:os: android
|
|
156
|
-
:type: phone
|
|
157
|
-
:css_width: 411
|
|
158
|
-
:css_height: 731
|
|
159
|
-
:default_orientation: portrait
|
|
160
|
-
: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"
|
|
161
|
-
:windows_phone8:
|
|
162
|
-
:name: "Generic Windows 8 phone"
|
|
163
|
-
:os: windows
|
|
164
|
-
:type: phone
|
|
165
|
-
:css_width: 320
|
|
166
|
-
:css_height: 480
|
|
167
|
-
:default_orientation: portrait
|
|
168
|
-
:user_agent: "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)"
|
|
169
|
-
:windows_phone7:
|
|
170
|
-
:name: "Generic Windows 7 phone"
|
|
171
|
-
:os: windows
|
|
172
|
-
:type: phone
|
|
173
|
-
:css_width: 320
|
|
174
|
-
:css_height: 480
|
|
175
|
-
:default_orientation: portrait
|
|
176
|
-
:user_agent: "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710)"
|
|
177
|
-
:lumia_950_xl:
|
|
178
|
-
:name: "Microsoft Lumia 950 XL"
|
|
179
|
-
:os: windows
|
|
180
|
-
:type: phone
|
|
181
|
-
:css_width: 360
|
|
182
|
-
:css_height: 640
|
|
183
|
-
:default_orientation: portrait
|
|
184
|
-
: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"
|
|
185
|
-
:blackberry_z10:
|
|
186
|
-
:name: "Blackberry Z10"
|
|
187
|
-
:os: blackberry
|
|
188
|
-
:type: phone
|
|
189
|
-
:css_width: 384
|
|
190
|
-
:css_height: 640
|
|
191
|
-
:default_orientation: portrait
|
|
192
|
-
:user_agent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+"
|
|
193
|
-
:blackberry_z30:
|
|
194
|
-
:name: "Blackberry Z30"
|
|
195
|
-
:os: blackberry
|
|
196
|
-
:type: phone
|
|
197
|
-
:css_width: 360
|
|
198
|
-
:css_height: 640
|
|
199
|
-
:default_orientation: portrait
|
|
200
|
-
:user_agent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+"
|
|
201
|
-
:blackberry_leap:
|
|
202
|
-
:name: "Blackberry Leap"
|
|
203
|
-
:os: blackberry
|
|
204
|
-
:type: phone
|
|
205
|
-
:css_width: 360
|
|
206
|
-
:css_height: 640
|
|
207
|
-
:default_orientation: portrait
|
|
208
|
-
:user_agent: "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.35+ (KHTML, like Gecko) Version/10.2.0.1791 Mobile Safari/537.35+"
|
|
209
|
-
:ipad:
|
|
210
|
-
:name: "iPad"
|
|
211
|
-
:os: ios
|
|
212
|
-
:type: tablet
|
|
213
|
-
:css_width: 1024
|
|
214
|
-
:css_height: 768
|
|
215
|
-
:default_orientation: landscape
|
|
216
|
-
: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"
|
|
217
|
-
:ipad_pro:
|
|
218
|
-
:name: "iPad Pro"
|
|
219
|
-
:os: ios
|
|
220
|
-
:type: tablet
|
|
221
|
-
:css_width: 1366
|
|
222
|
-
:css_height: 1024
|
|
223
|
-
:default_orientation: landscape
|
|
224
|
-
: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"
|
|
225
|
-
:ipad_pro_10_5:
|
|
226
|
-
:name: "iPad Pro 10.5 in."
|
|
227
|
-
:os: ios
|
|
228
|
-
:type: tablet
|
|
229
|
-
:css_width: 1112
|
|
230
|
-
:css_height: 834
|
|
231
|
-
:default_orientation: landscape
|
|
232
|
-
: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"
|
|
233
|
-
:ipad_chrome:
|
|
234
|
-
:name: "iPad - Chrome"
|
|
235
|
-
:os: ios
|
|
236
|
-
:type: tablet
|
|
237
|
-
:css_width: 1024
|
|
238
|
-
:css_height: 768
|
|
239
|
-
:default_orientation: landscape
|
|
240
|
-
:user_agent: "Mozilla/5.0 (iPad; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/65.0.3325.152 Mobile/14G60 Safari/602.1"
|
|
241
|
-
:ipad_firefox:
|
|
242
|
-
:name: "iPad - Firefox"
|
|
243
|
-
:os: ios
|
|
244
|
-
:type: tablet
|
|
245
|
-
:css_width: 1024
|
|
246
|
-
:css_height: 768
|
|
247
|
-
:default_orientation: landscape
|
|
248
|
-
:user_agent: "Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) FxiOS/11.0b9935 Mobile/14G60 Safari/603.3.8"
|
|
249
|
-
:ipad_edge:
|
|
250
|
-
:name: "iPad - MS Edge"
|
|
251
|
-
:os: ios
|
|
252
|
-
:type: tablet
|
|
253
|
-
:css_width: 1024
|
|
254
|
-
:css_height: 768
|
|
255
|
-
:default_orientation: landscape
|
|
256
|
-
:user_agent: "Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) EdgiOS/41.13.0.0 Mobile/14G60 Safari/603.3.8"
|
|
257
|
-
:android_tablet:
|
|
258
|
-
:name: "Generic Android tablet"
|
|
259
|
-
:os: android
|
|
260
|
-
:type: tablet
|
|
261
|
-
:css_width: 1024
|
|
262
|
-
:css_height: 768
|
|
263
|
-
:default_orientation: landscape
|
|
264
|
-
: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"
|
|
265
|
-
:kindle_fire:
|
|
266
|
-
:name: "Kindle Fire"
|
|
267
|
-
:os: kindle
|
|
268
|
-
:type: tablet
|
|
269
|
-
:css_width: 1024
|
|
270
|
-
:css_height: 600
|
|
271
|
-
:default_orientation: landscape
|
|
272
|
-
: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"
|
|
273
|
-
:kindle_firehd7:
|
|
274
|
-
:name: "Kindle Fire HD 7"
|
|
275
|
-
:os: kindle
|
|
276
|
-
:type: tablet
|
|
277
|
-
:css_width: 800
|
|
278
|
-
:css_height: 480
|
|
279
|
-
:default_orientation: landscape
|
|
280
|
-
: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"
|
|
281
|
-
:kindle_firehd8:
|
|
282
|
-
:name: "Kindle Fire HD 8 or 9"
|
|
283
|
-
:os: kindle
|
|
284
|
-
:type: tablet
|
|
285
|
-
:css_width: 1280
|
|
286
|
-
:css_height: 800
|
|
287
|
-
:default_orientation: landscape
|
|
288
|
-
: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"
|
|
289
|
-
:kindle_firehd10:
|
|
290
|
-
:name: "Kindle Fire HD 10"
|
|
291
|
-
:os: kindle
|
|
292
|
-
:type: tablet
|
|
293
|
-
:css_width: 1920
|
|
294
|
-
:css_height: 1200
|
|
295
|
-
:default_orientation: landscape
|
|
296
|
-
: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"
|
|
297
|
-
:surface:
|
|
298
|
-
:name: "Microsoft Surface"
|
|
299
|
-
:os: windows
|
|
300
|
-
:type: tablet
|
|
301
|
-
:css_width: 1366
|
|
302
|
-
:css_height: 768
|
|
303
|
-
:default_orientation: landscape
|
|
304
|
-
:user_agent: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)"
|
|
305
|
-
:blackberry_playbook:
|
|
306
|
-
:name: "Blackberry Playbook"
|
|
307
|
-
:os: blackberry
|
|
308
|
-
:type: tablet
|
|
309
|
-
:css_width: 1024
|
|
310
|
-
:css_height: 600
|
|
311
|
-
:default_orientation: landscape
|
|
312
|
-
: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+"
|
|
313
|
-
:blackberry_passport:
|
|
314
|
-
:name: "Blackberry Passport"
|
|
315
|
-
:os: blackberry
|
|
316
|
-
:type: tablet
|
|
317
|
-
:css_width: 504
|
|
318
|
-
:css_height: 504
|
|
319
|
-
:default_orientation: portrait
|
|
320
|
-
: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"
|
|
321
|
-
:samsung_galaxy_tab:
|
|
322
|
-
:name: "Samsung Galaxy Tab series"
|
|
323
|
-
:os: android
|
|
324
|
-
:type: tablet
|
|
325
|
-
:css_width: 1280
|
|
326
|
-
:css_height: 800
|
|
327
|
-
:default_orientation: landscape
|
|
328
|
-
: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"
|
|
329
|
-
:google_nexus7:
|
|
330
|
-
:name: "Nexus 7 series"
|
|
331
|
-
:os: android
|
|
332
|
-
:type: tablet
|
|
333
|
-
:css_width: 960
|
|
334
|
-
:css_height: 600
|
|
335
|
-
:default_orientation: landscape
|
|
336
|
-
: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"
|
|
337
|
-
:google_nexus9:
|
|
338
|
-
:name: "Nexus 9 series"
|
|
339
|
-
:os: android
|
|
340
|
-
:type: tablet
|
|
341
|
-
:css_width: 1024
|
|
342
|
-
:css_height: 768
|
|
343
|
-
:default_orientation: landscape
|
|
344
|
-
: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"
|
|
345
|
-
:google_nexus10:
|
|
346
|
-
:name: "Nexus 10 series"
|
|
347
|
-
:os: android
|
|
348
|
-
:type: tablet
|
|
349
|
-
:css_width: 1280
|
|
350
|
-
:css_height: 800
|
|
351
|
-
:default_orientation: landscape
|
|
352
|
-
: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"
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
require 'childprocess'
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# This class is designed to start and stop the Appium Server process. In order to use it you must have Appium
|
|
5
|
-
# and node installed on your computer. You can pass parameters to Appium at startup via the constructor.
|
|
6
|
-
#
|
|
7
|
-
module TestCentricity
|
|
8
|
-
class AppiumServer
|
|
9
|
-
|
|
10
|
-
attr_accessor :process
|
|
11
|
-
|
|
12
|
-
def initialize(params={})
|
|
13
|
-
@params = params
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
#
|
|
17
|
-
# Start the Appium Server
|
|
18
|
-
#
|
|
19
|
-
def start
|
|
20
|
-
# terminate any currently running Appium Server
|
|
21
|
-
if running?
|
|
22
|
-
system('killall -9 node')
|
|
23
|
-
puts 'Terminating existing Appium Server'
|
|
24
|
-
sleep(5)
|
|
25
|
-
puts 'Appium Server is being restarted'
|
|
26
|
-
else
|
|
27
|
-
puts 'Appium Server is being started'
|
|
28
|
-
end
|
|
29
|
-
# start new Appium Server
|
|
30
|
-
@process = ChildProcess.build(*parameters)
|
|
31
|
-
process.start
|
|
32
|
-
# wait until confirmation that Appium Server is running
|
|
33
|
-
wait = Selenium::WebDriver::Wait.new(timeout: 30)
|
|
34
|
-
wait.until { running? }
|
|
35
|
-
puts "Appium Server is running - PID = #{process.pid}"
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
#
|
|
39
|
-
# Check to see if Appium Server is running
|
|
40
|
-
#
|
|
41
|
-
def running?
|
|
42
|
-
response = nil
|
|
43
|
-
begin
|
|
44
|
-
response = Net::HTTP.get_response(URI('http://127.0.0.1:4723/wd/hub/sessions'))
|
|
45
|
-
rescue
|
|
46
|
-
end
|
|
47
|
-
response && response.code_type == Net::HTTPOK
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
# Stop the Appium Server
|
|
52
|
-
#
|
|
53
|
-
def stop
|
|
54
|
-
process.stop
|
|
55
|
-
puts 'Appium Server has been terminated'
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
private
|
|
59
|
-
|
|
60
|
-
def parameters
|
|
61
|
-
cmd = ['appium']
|
|
62
|
-
@params.each do |key, value|
|
|
63
|
-
cmd << '--' + key.to_s
|
|
64
|
-
cmd << value.to_s if not value.nil? and value.size > 0
|
|
65
|
-
end
|
|
66
|
-
cmd
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
@@ -1,174 +0,0 @@
|
|
|
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
|
-
Environ.device_type = device[:type]
|
|
143
|
-
name
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
def self.browser_size(browser, orientation)
|
|
147
|
-
device_name = browser.gsub(/\s+/, '').downcase.to_sym
|
|
148
|
-
device = get_devices[device_name]
|
|
149
|
-
if device
|
|
150
|
-
width = device[:css_width]
|
|
151
|
-
height = device[:css_height]
|
|
152
|
-
default_orientation = device[:default_orientation].to_sym
|
|
153
|
-
if orientation
|
|
154
|
-
Environ.device_orientation = orientation
|
|
155
|
-
orientation.downcase.to_sym == default_orientation ?
|
|
156
|
-
size = [width, height] :
|
|
157
|
-
size = [height, width]
|
|
158
|
-
else
|
|
159
|
-
Environ.device_orientation = device[:default_orientation]
|
|
160
|
-
size = [width, height]
|
|
161
|
-
end
|
|
162
|
-
else
|
|
163
|
-
size = [1650, 1000]
|
|
164
|
-
end
|
|
165
|
-
size
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
private
|
|
169
|
-
|
|
170
|
-
def self.get_devices
|
|
171
|
-
YAML.load_file File.expand_path('../../devices/devices.yml', __FILE__)
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
require 'yaml'
|
|
2
|
-
require 'json'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module TestCentricity
|
|
6
|
-
|
|
7
|
-
XL_PRIMARY_DATA_PATH ||= 'features/test_data/'
|
|
8
|
-
XL_PRIMARY_DATA_FILE ||= "#{XL_PRIMARY_DATA_PATH}data.xls"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class DataObject
|
|
12
|
-
attr_accessor :current
|
|
13
|
-
attr_accessor :context
|
|
14
|
-
attr_accessor :hash_table
|
|
15
|
-
|
|
16
|
-
def initialize(data)
|
|
17
|
-
@hash_table = data
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @deprecated Please use {#current=} instead
|
|
21
|
-
def self.set_current(current)
|
|
22
|
-
warn "[DEPRECATION] 'TestCentricity::DataObject.set_current' is deprecated. Please use 'current=' instead."
|
|
23
|
-
@current = current
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def self.current
|
|
27
|
-
@current
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def self.current=(current)
|
|
31
|
-
@current = current
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class DataSource
|
|
37
|
-
attr_accessor :current
|
|
38
|
-
|
|
39
|
-
def read_yaml_node_data(file_name, node_name)
|
|
40
|
-
data = YAML.load_file("#{XL_PRIMARY_DATA_PATH}#{file_name}")
|
|
41
|
-
data[node_name]
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def read_json_node_data(file_name, node_name)
|
|
45
|
-
raw_data = File.read("#{XL_PRIMARY_DATA_PATH}#{file_name}")
|
|
46
|
-
data = JSON.parse(raw_data)
|
|
47
|
-
data[node_name]
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
class ExcelDataSource < TestCentricity::DataSource
|
|
53
|
-
def pick_excel_data_source(sheet, row_spec)
|
|
54
|
-
if ENV['TEST_ENVIRONMENT']
|
|
55
|
-
environment = ENV['TEST_ENVIRONMENT']
|
|
56
|
-
data_file = "#{XL_PRIMARY_DATA_PATH}#{environment}_data.xls"
|
|
57
|
-
data_file = XL_PRIMARY_DATA_FILE unless ExcelData.rowspec_exists?(data_file, sheet, row_spec)
|
|
58
|
-
else
|
|
59
|
-
data_file = XL_PRIMARY_DATA_FILE
|
|
60
|
-
end
|
|
61
|
-
data_file
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def read_excel_row_data(sheet, row_name, parallel = false)
|
|
65
|
-
parallel == :parallel && ENV['PARALLEL'] ? row_spec = "#{row_name}#{ENV['TEST_ENV_NUMBER']}" : row_spec = row_name
|
|
66
|
-
ExcelData.read_row_data(pick_excel_data_source(sheet, row_spec), sheet, row_spec)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def read_excel_pool_data(sheet, row_name, parallel = false)
|
|
70
|
-
parallel == :parallel && ENV['PARALLEL'] ? row_spec = "#{row_name}#{ENV['TEST_ENV_NUMBER']}" : row_spec = row_name
|
|
71
|
-
ExcelData.read_row_from_pool(pick_excel_data_source(sheet, row_name), sheet, row_spec)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def read_excel_range_data(sheet, range_name)
|
|
75
|
-
ExcelData.read_range_data(pick_excel_data_source(sheet, range_name), sheet, range_name)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|