testcentricity 2.3.19 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8046d5d0ef0d140f8236192547ae759e4a01d8d5
4
- data.tar.gz: d58ddbc8a4065f42dbd6be3faeb02f2b483208a0
3
+ metadata.gz: bec8539d0e9b7b3442baf37b6ad6dfa0127f1098
4
+ data.tar.gz: 92f2cbb4725151a936056835745029b93bf1e2be
5
5
  SHA512:
6
- metadata.gz: eeb9e89b65774488523144e1c9754a6cdd8e8c14b1918965ae52085c4a9636fd24688e1e509dd933026b1c67fc306225cc476643b3d668b99643c99a555167b7
7
- data.tar.gz: 5c6e2de2fe6426af1887cc7e657008af6df80e9409c6413bb0c96009ac1f00d7a7844eacd6d7905c7a5dd1100d2aeda9250bf612e57db39273f16299ed058fd3
6
+ metadata.gz: a00a9c37aaeb50c688cc39be27f37e3505db5f410bab9595fd1b3f68aa6ed205febf1a402c2191f4ebb21d13bb3a2ac8ab109c676b6e0b87d690b9016014d5ee
7
+ data.tar.gz: f134665182d8ffa55f92cb699eb68ad1ff76245214f15f10eaf748ba96abb18f1dcf781b8cdc8ab9371bc26b5c66e968dfcdbbd5c9f2e18f3b05c930222a1cb8
data/README.md CHANGED
@@ -28,6 +28,12 @@ hosted instances of Chrome, Firefox, Safari, and IE web browsers.
28
28
 
29
29
 
30
30
  ## What's New
31
+ ###Version 2.4.0
32
+
33
+ * Updated `TestCentricity::WebDriverConnect.initialize_web_driver` method to read the `APP_FULL_RESET`, `APP_NO_RESET`, and `NEW_COMMAND_TIMEOUT` Environment
34
+ Variables and set the corresponding `fullReset`, `noReset`, and `newCommandTimeout` Appium capabilities for iOS and Android physical devices and simulators.
35
+ Also reads the `WDA_LOCAL_PORT` Environment Variable and sets the `wdaLocalPort` Appium capability for iOS physical devices only.
36
+
31
37
  ###Version 2.3.18
32
38
 
33
39
  * Updated `SelectList.define_list_elements` method to accept value for `:list_trigger` element.
@@ -985,10 +991,13 @@ Once your test environment is properly configured, the following **Environment V
985
991
  `APP_ALLOW_POPUPS` | [Optional] Allow javascript to open new windows in Safari. Set to `true` or `false`
986
992
  `APP_IGNORE_FRAUD_WARNING` | [Optional] Prevent Safari from showing a fraudulent website warning. Set to `true` or `false`
987
993
  `APP_NO_RESET` | [Optional] Don't reset app state after each test. Set to `true` or `false`
994
+ `APP_FULL_RESET` | [Optional] Perform a complete reset. Set to `true` or `false`
988
995
  `APP_INITIAL_URL` | [Optional] Initial URL, default is a local welcome page. e.g. `http://www.apple.com`
996
+ `WDA_LOCAL_PORT` | [Optional] Used to forward traffic from Mac host to real iOS devices over USB. Default value is same as port number used by WDA on device.
989
997
  `LOCALE` | [Optional] Locale to set for the simulator. e.g. `fr_CA`
990
998
  `LANGUAGE` | [Optional] Language to set for the simulator. e.g. `fr`
991
999
  `ORIENTATION` | [Optional] Set to `portrait` or `landscape` (only for iOS simulators)
1000
+ `NEW_COMMAND_TIMEOUT` | [Optional] Time (in Seconds) that Appium will wait for a new command from the client
992
1001
 
993
1002
 
994
1003
  ### Mobile Chrome or Android browsers on Android Studio Virtual Device emulators
@@ -1013,8 +1022,12 @@ Once your test environment is properly configured, the following **Environment V
1013
1022
  `DEVICE_TYPE` | Must be set to `phone` or `tablet`
1014
1023
  `ORIENTATION` | [Optional] Set to `portrait` or `landscape`
1015
1024
  `APP_INITIAL_URL` | [Optional] Initial URL, default is a local welcome page. e.g. `http://www.apple.com`
1025
+ `APP_NO_RESET` | [Optional] Don't reset app state after each test. Set to `true` or `false`
1026
+ `APP_FULL_RESET` | [Optional] Perform a complete reset. Set to `true` or `false`
1016
1027
  `LOCALE` | [Optional] Locale to set for the simulator. e.g. `fr_CA`
1017
1028
  `LANGUAGE` | [Optional] Language to set for the simulator. e.g. `fr`
1029
+ `NEW_COMMAND_TIMEOUT` | [Optional] Time (in Seconds) that Appium will wait for a new command from the client
1030
+ `CHROMEDRIVER_EXECUTABLE` | [Optional] Absolute local path to webdriver executable
1018
1031
 
1019
1032
 
1020
1033
  ### Remotely hosted desktop and mobile web browsers
@@ -11,57 +11,97 @@ module TestCentricity
11
11
  Environ.platform = :mobile
12
12
  Environ.driver = :appium
13
13
  Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
14
+ Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
14
15
 
15
16
  @config_file = project_path
16
17
 
17
18
  if project_path.nil?
18
- Environ.device_name = ENV['APP_DEVICE']
19
- Environ.device_os = ENV['APP_PLATFORM_NAME']
20
- Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
21
- ENV['UDID'] ? Environ.device = :device : Environ.device = :simulator
19
+ browser = ENV['WEB_BROWSER']
20
+ case browser.downcase.to_sym
21
+ when :appium
22
+ Environ.device_name = ENV['APP_DEVICE']
23
+ Environ.device_os = ENV['APP_PLATFORM_NAME']
24
+ ENV['UDID'] ? Environ.device = :device : Environ.device = :simulator
25
+ when :browserstack
26
+ Environ.device_name = ENV['BS_DEVICE']
27
+ Environ.device_os = ENV['BS_OS']
28
+ end
22
29
  end
23
30
  @running = false
24
31
  end
25
32
 
26
33
  def self.start_driver
27
34
  if @config_file.nil?
28
- desired_capabilities = {
29
- caps: {
30
- platformName: ENV['APP_PLATFORM_NAME'],
31
- platformVersion: ENV['APP_VERSION'],
32
- deviceName: ENV['APP_DEVICE'],
33
- automationName: ENV['AUTOMATION_ENGINE']
34
- }
35
- }
36
- capabilities = desired_capabilities[:caps]
37
- capabilities[:avd] = ENV['APP_DEVICE'] if ENV['APP_PLATFORM_NAME'].downcase.to_sym == :android
38
- capabilities[:orientation] = ENV['ORIENTATION'].upcase if ENV['ORIENTATION']
39
- capabilities[:language] = ENV['LANGUAGE'] if ENV['LANGUAGE']
40
- capabilities[:locale] = ENV['LOCALE'].gsub('-', '_') if ENV['LOCALE']
41
- capabilities[:newCommandTimeout] = ENV['NEW_COMMAND_TIMEOUT'] if ENV['NEW_COMMAND_TIMEOUT']
42
- capabilities[:noReset] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
43
- capabilities[:fullReset] = ENV['APP_FULL_RESET'] if ENV['APP_FULL_RESET']
44
- if ENV['UDID']
45
- capabilities[:udid] = ENV['UDID']
46
- capabilities[:bundleId] = ENV['BUNDLE_ID'] if ENV['BUNDLE_ID']
47
- capabilities[:xcodeOrgId] = ENV['TEAM_ID'] if ENV['TEAM_ID']
48
- capabilities[:xcodeSigningId] = ENV['TEAM_NAME'] if ENV['TEAM_NAME']
49
- capabilities[:appActivity] = ENV['APP_ACTIVITY'] if ENV['APP_ACTIVITY']
50
- capabilities[:appPackage] = ENV['APP_PACKAGE'] if ENV['APP_PACKAGE']
51
- end
35
+ browser = ENV['WEB_BROWSER']
36
+ case browser.downcase.to_sym
37
+ when :appium
38
+ desired_capabilities = {
39
+ caps: {
40
+ platformName: ENV['APP_PLATFORM_NAME'],
41
+ platformVersion: ENV['APP_VERSION'],
42
+ deviceName: ENV['APP_DEVICE'],
43
+ automationName: ENV['AUTOMATION_ENGINE']
44
+ }
45
+ }
46
+ capabilities = desired_capabilities[:caps]
47
+ capabilities[:avd] = ENV['APP_DEVICE'] if ENV['APP_PLATFORM_NAME'].downcase.to_sym == :android
48
+ capabilities[:orientation] = ENV['ORIENTATION'].upcase if ENV['ORIENTATION']
49
+ capabilities[:language] = ENV['LANGUAGE'] if ENV['LANGUAGE']
50
+ capabilities[:locale] = ENV['LOCALE'].gsub('-', '_') if ENV['LOCALE']
51
+ capabilities[:newCommandTimeout] = ENV['NEW_COMMAND_TIMEOUT'] if ENV['NEW_COMMAND_TIMEOUT']
52
+ capabilities[:noReset] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
53
+ capabilities[:fullReset] = ENV['APP_FULL_RESET'] if ENV['APP_FULL_RESET']
54
+ capabilities[:webkitDebugProxyPort] = ENV['WEBKIT_DEBUG_PROXY_PORT'] if ENV['WEBKIT_DEBUG_PROXY_PORT']
55
+ capabilities[:webDriverAgentUrl] = ENV['WEBDRIVER_AGENT_URL'] if ENV['WEBDRIVER_AGENT_URL']
56
+ capabilities[:wdaLocalPort] = ENV['WDA_LOCAL_PORT'] if ENV['WDA_LOCAL_PORT']
57
+ capabilities[:usePrebuiltWDA] = ENV['USE_PREBUILT_WDA'] if ENV['USE_PREBUILT_WDA']
58
+ capabilities[:useNewWDA] = ENV['USE_NEW_WDA'] if ENV['USE_NEW_WDA']
59
+ capabilities[:startIWDP] = ENV['START_IWDP'] if ENV['START_IWDP']
60
+ capabilities[:autoWebview] = ENV['AUTO_WEBVIEW'] if ENV['AUTO_WEBVIEW']
61
+ capabilities[:chromedriverExecutable] = ENV['CHROMEDRIVER_EXECUTABLE'] if ENV['CHROMEDRIVER_EXECUTABLE']
62
+ capabilities[:autoWebviewTimeout] = ENV['AUTO_WEBVIEW_TIMEOUT'] if ENV['AUTO_WEBVIEW_TIMEOUT']
63
+
64
+ if ENV['UDID']
65
+ capabilities[:udid] = ENV['UDID']
66
+ capabilities[:bundleId] = ENV['BUNDLE_ID'] if ENV['BUNDLE_ID']
67
+ capabilities[:xcodeOrgId] = ENV['TEAM_ID'] if ENV['TEAM_ID']
68
+ capabilities[:xcodeSigningId] = ENV['TEAM_NAME'] if ENV['TEAM_NAME']
69
+ capabilities[:appActivity] = ENV['APP_ACTIVITY'] if ENV['APP_ACTIVITY']
70
+ capabilities[:appPackage] = ENV['APP_PACKAGE'] if ENV['APP_PACKAGE']
71
+ end
52
72
 
53
- if ENV['APP']
54
- capabilities[:app] = ENV['APP']
55
- else
56
- if Environ.is_android?
57
- capabilities[:app] = Environ.current.android_apk_path
58
- elsif Environ.is_ios?
59
- Environ.is_device? ?
60
- capabilities[:app] = Environ.current.ios_ipa_path :
61
- capabilities[:app] = Environ.current.ios_app_path
73
+ if ENV['APP']
74
+ capabilities[:app] = ENV['APP']
75
+ else
76
+ if Environ.is_android?
77
+ capabilities[:app] = Environ.current.android_apk_path
78
+ elsif Environ.is_ios?
79
+ Environ.is_device? ?
80
+ capabilities[:app] = Environ.current.ios_ipa_path :
81
+ capabilities[:app] = Environ.current.ios_app_path
82
+ end
62
83
  end
84
+ when :browserstack
85
+ endpoint = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub-cloud.browserstack.com/wd/hub"
86
+
87
+ capabilities = {}
88
+ capabilities['device'] = ENV['BS_DEVICE']
89
+ capabilities['os_version'] = ENV['BS_OS_VERSION']
90
+ capabilities['app'] = "bs://#{ENV['APP_ID']}"
91
+ capabilities['realMobile'] = true
92
+ capabilities['project'] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
93
+ capabilities['build'] = ENV['AUTOMATE_BUILD'] if ENV['AUTOMATE_BUILD']
94
+ capabilities['deviceOrientation'] = ENV['ORIENTATION'] if ENV['ORIENTATION']
95
+ capabilities['browserstack.debug'] = true
96
+ capabilities['browserstack.video'] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
97
+ capabilities['browserstack.debug'] = 'true'
98
+
99
+ appium_lib_options = { server_url: endpoint }
100
+ desired_capabilities = {
101
+ appium_lib: appium_lib_options,
102
+ caps: capabilities
103
+ }
63
104
  end
64
-
65
105
  else
66
106
  base_path = 'config'
67
107
  unless File.directory?(File.join(@config_file, base_path))
@@ -70,9 +110,13 @@ module TestCentricity
70
110
  appium_caps = File.join(@config_file, base_path, 'appium.txt')
71
111
  desired_capabilities = Appium.load_appium_txt file: appium_caps
72
112
  end
113
+
114
+ puts "Appium desired_capabilities = #{desired_capabilities}" if ENV['DEBUG']
115
+
73
116
  Appium::Driver.new(desired_capabilities).start_driver
74
117
  @running = true
75
118
  Appium.promote_appium_methods TestCentricity::ScreenObject
119
+ Appium.promote_appium_methods TestCentricity::ScreenSection
76
120
  Appium.promote_appium_methods TestCentricity::AppUIElement
77
121
 
78
122
  Environ.screen_size = $driver.window_size
@@ -152,6 +196,7 @@ module TestCentricity
152
196
 
153
197
  def self.default_context
154
198
  $driver.switch_to_default_context
199
+ puts "Current context = #{$driver.current_context}" if ENV['DEBUG']
155
200
  end
156
201
 
157
202
  def self.is_webview?
@@ -164,7 +209,9 @@ module TestCentricity
164
209
 
165
210
  def self.webview_context
166
211
  contexts = available_contexts
212
+ puts "Contexts = #{contexts}" if ENV['DEBUG']
167
213
  set_context(contexts.last)
214
+ puts "Current context = #{$driver.current_context}" if ENV['DEBUG']
168
215
  end
169
216
  end
170
217
  end
@@ -361,7 +361,6 @@ module TestCentricity
361
361
  end
362
362
 
363
363
 
364
-
365
364
  def width
366
365
  section = find_section
367
366
  section_not_found_exception(section)
@@ -379,6 +378,7 @@ module TestCentricity
379
378
  section_not_found_exception(section)
380
379
  section.location.x
381
380
  end
381
+
382
382
  def y_loc
383
383
  section = find_section
384
384
  section_not_found_exception(section)
@@ -386,8 +386,6 @@ module TestCentricity
386
386
  end
387
387
 
388
388
 
389
-
390
-
391
389
  def verify_ui_states(ui_states)
392
390
  ui_states.each do |ui_object, object_states|
393
391
  object_states.each do |property, state|
@@ -35,19 +35,15 @@ module TestCentricity
35
35
  def tap
36
36
  obj = element
37
37
  object_not_found_exception(obj)
38
- x = obj.location.x
39
- y = obj.location.y
40
- tap_action = Appium::TouchAction.new.tap(element: obj, x: x, y: y)
41
- tap_action.perform
38
+ actions = Appium::TouchAction.new
39
+ actions.tap(element: obj).perform
42
40
  end
43
41
 
44
42
  def double_tap
45
43
  obj = element
46
44
  object_not_found_exception(obj)
47
- x = obj.location.x
48
- y = obj.location.y
49
- tap_action = Appium::TouchAction.new.double_tap(element: obj, x: x, y: y)
50
- tap_action.perform
45
+ actions = Appium::TouchAction.new
46
+ actions.double_tap(element: obj).perform
51
47
  end
52
48
 
53
49
  def set(value)
@@ -301,21 +297,44 @@ module TestCentricity
301
297
  def scroll(direction)
302
298
  obj = element
303
299
  object_not_found_exception(obj)
304
- execute_script('mobile: scroll', direction: direction.to_s, element: obj)
300
+ if Environ.device_os == :ios
301
+ execute_script('mobile: scroll', direction: direction.to_s, element: obj)
302
+ else
303
+ case direction
304
+ when :down
305
+ x = obj.size.width.to_i / 2
306
+ bottom = obj.size.height
307
+ bottom = window_size[:height].to_i if bottom > window_size[:height]
308
+ start_pt = [x, bottom]
309
+ delta_pt = [0, 0 - (bottom - 20)]
310
+
311
+ when :up
312
+ x = obj.size.width.to_i / 2
313
+ top = obj.location.y - (obj.size.height / 2)
314
+ top = 0 if top < 0
315
+ start_pt = [x, top]
316
+ delta_pt = [0, obj.size.height / 2]
317
+ end
318
+ puts "Swipe start_pt = #{start_pt} / delta_pt = #{delta_pt}" if ENV['DEBUG']
319
+ Appium::TouchAction.new.swipe(start_x: start_pt[0], start_y: start_pt[1], delta_x: delta_pt[0], delta_y: delta_pt[1]).perform
320
+ end
305
321
  end
306
322
 
307
323
  def swipe(direction)
308
- execute_script('mobile: swipe', direction: direction.to_s)
324
+ obj = element
325
+ object_not_found_exception(obj)
326
+ if Environ.device_os == :ios
327
+ execute_script('mobile: swipe', direction: direction.to_s, element: obj)
328
+ else
329
+ actions = Appium::TouchAction.new
330
+ actions.scroll(element: obj).perform
331
+ end
309
332
  end
310
333
 
311
-
312
334
  private
313
335
 
314
336
  def element
315
- parent_section = @context == :section
316
- parent_section ? tries ||= 2 : tries ||= 1
317
-
318
- if parent_section && tries > 1
337
+ if @context == :section
319
338
  parent_obj = nil
320
339
  locators = @parent.get_locator
321
340
  locators.each do |parent_locator|
@@ -335,8 +354,7 @@ module TestCentricity
335
354
  obj
336
355
  end
337
356
  rescue
338
- puts "Did not find parent object '#{@parent.get_name}' - #{@parent.get_locator}" if tries == 2 && ENV['DEBUG']
339
- retry if (tries -= 1) > 0
357
+ puts "Did not find object '#{@name}' - #{@locator}" if ENV['DEBUG']
340
358
  nil
341
359
  end
342
360
 
@@ -1,23 +1,51 @@
1
1
  module TestCentricity
2
2
  class AppList < AppUIElement
3
+ attr_accessor :list_item
4
+
3
5
  def initialize(name, parent, locator, context)
4
6
  super
5
- @type = :list
7
+ @type = :list
8
+ @list_item = nil
9
+ end
10
+
11
+ def define_list_elements(element_spec)
12
+ element_spec.each do |element, value|
13
+ case element
14
+ when :list_item
15
+ @list_item = value
16
+ else
17
+ raise "#{element} is not a recognized list element"
18
+ end
19
+ end
6
20
  end
7
21
 
8
22
  def get_item_count
9
23
  obj = element
10
24
  object_not_found_exception(obj)
11
- if Environ.device_os == :ios
12
- items = obj.find_elements(:class, 'XCUIElementTypeCell')
13
- else
14
- items = obj.find_elements(:class, 'android.widget.FrameLayout')
15
- end
25
+ list_loc = get_list_item_locator
26
+ items = obj.find_elements(list_loc.keys[0], list_loc.values[0])
16
27
  items.size
17
28
  end
18
29
 
19
30
  def get_list_items
31
+ list_items = []
32
+ obj = element
33
+ object_not_found_exception(obj)
34
+ list_loc = get_list_item_locator
35
+ items = obj.find_elements(list_loc.keys[0], list_loc.values[0])
36
+ items.each do |item|
37
+ list_items.push(item.text)
38
+ end
39
+ list_items
40
+ end
20
41
 
42
+ def click_list_item(index)
43
+ obj = element
44
+ object_not_found_exception(obj)
45
+ list_loc = get_list_item_locator
46
+ items = obj.find_elements(list_loc.keys[0], list_loc.values[0])
47
+ list_item = items[index]
48
+ list_item.click
21
49
  end
22
50
 
23
51
  def get_list_item(index)
@@ -50,5 +78,18 @@ module TestCentricity
50
78
  rescue
51
79
  raise "Value of List #{object_ref_message} failed to change from '#{value}' after #{timeout} seconds" if get_item_count == value
52
80
  end
81
+
82
+ private
83
+
84
+ def get_list_item_locator
85
+ if @list_item.nil?
86
+ if Environ.device_os == :ios
87
+ define_list_elements({ :list_item => { class: 'XCUIElementTypeCell' } } )
88
+ else
89
+ define_list_elements({ :list_item => { class: 'android.widget.FrameLayout' } } )
90
+ end
91
+ end
92
+ @list_item
93
+ end
53
94
  end
54
95
  end
@@ -1,3 +1,3 @@
1
1
  module TestCentricity
2
- VERSION = '2.3.19'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -192,12 +192,21 @@ module TestCentricity
192
192
  else
193
193
  Environ.device = :simulator
194
194
  end
195
- desired_capabilities[:safariInitialUrl] = ENV['APP_INITIAL_URL'] if ENV['APP_INITIAL_URL']
196
- desired_capabilities[:safariAllowPopups] = ENV['APP_ALLOW_POPUPS'] if ENV['APP_ALLOW_POPUPS']
197
195
  desired_capabilities[:safariIgnoreFraudWarning] = ENV['APP_IGNORE_FRAUD_WARNING'] if ENV['APP_IGNORE_FRAUD_WARNING']
198
- desired_capabilities[:noReset] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
196
+ desired_capabilities[:safariInitialUrl] = ENV['APP_INITIAL_URL'] if ENV['APP_INITIAL_URL']
197
+ desired_capabilities[:safariAllowPopups] = ENV['APP_ALLOW_POPUPS'] if ENV['APP_ALLOW_POPUPS']
198
+ desired_capabilities[:newCommandTimeout] = ENV['NEW_COMMAND_TIMEOUT'] if ENV['NEW_COMMAND_TIMEOUT']
199
+ desired_capabilities[:noReset] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
200
+ desired_capabilities[:fullReset] = ENV['APP_FULL_RESET'] if ENV['APP_FULL_RESET']
201
+ desired_capabilities[:webkitDebugProxyPort] = ENV['WEBKIT_DEBUG_PROXY_PORT'] if ENV['WEBKIT_DEBUG_PROXY_PORT']
202
+ desired_capabilities[:webDriverAgentUrl] = ENV['WEBDRIVER_AGENT_URL'] if ENV['WEBDRIVER_AGENT_URL']
203
+ desired_capabilities[:wdaLocalPort] = ENV['WDA_LOCAL_PORT'] if ENV['WDA_LOCAL_PORT']
204
+ desired_capabilities[:usePrebuiltWDA] = ENV['USE_PREBUILT_WDA'] if ENV['USE_PREBUILT_WDA']
205
+ desired_capabilities[:useNewWDA] = ENV['USE_NEW_WDA'] if ENV['USE_NEW_WDA']
206
+ desired_capabilities[:chromedriverExecutable] = ENV['CHROMEDRIVER_EXECUTABLE'] if ENV['CHROMEDRIVER_EXECUTABLE']
207
+
199
208
  desired_capabilities[:language] = ENV['LANGUAGE'] if ENV['LANGUAGE']
200
- desired_capabilities[:locale] = ENV['LOCALE'].gsub('-', '_') if ENV['LOCALE']
209
+ desired_capabilities[:locale] = ENV['LOCALE'].gsub('-', '_') if ENV['LOCALE']
201
210
 
202
211
  Capybara.register_driver :appium do |app|
203
212
  appium_lib_options = { server_url: endpoint }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testcentricity
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.19
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - A.J. Mrozinski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-14 00:00:00.000000000 Z
11
+ date: 2018-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler