testcentricity_web 2.1.10 → 2.2.0

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.
@@ -29,8 +29,10 @@ module TestCentricity
29
29
  attr_accessor :test_environment
30
30
  attr_accessor :browser
31
31
  attr_accessor :browser_size
32
+ attr_accessor :session_state
32
33
  attr_accessor :os
33
34
  attr_accessor :device
35
+ attr_accessor :device_name
34
36
  attr_accessor :device_type
35
37
  attr_accessor :device_os
36
38
  attr_accessor :device_orientation
@@ -114,6 +116,14 @@ module TestCentricity
114
116
  @browser_size
115
117
  end
116
118
 
119
+ def self.session_state=(session_state)
120
+ @session_state = session_state
121
+ end
122
+
123
+ def self.session_state
124
+ @session_state
125
+ end
126
+
117
127
  # @deprecated Please use {#os=} instead
118
128
  def self.set_os(os)
119
129
  warn "[DEPRECATION] 'TestCentricity::Environ.set_os' is deprecated. Please use 'Environ.os =' instead."
@@ -149,13 +159,21 @@ module TestCentricity
149
159
  end
150
160
 
151
161
  def self.device_type=(type)
152
- @device_type = type.downcase
162
+ @device_type = type.downcase.to_sym
153
163
  end
154
164
 
155
165
  def self.device_type
156
166
  @device_type
157
167
  end
158
168
 
169
+ def self.device_name=(name)
170
+ @device_name = name
171
+ end
172
+
173
+ def self.device_name
174
+ @device_name
175
+ end
176
+
159
177
  def self.device_os=(os)
160
178
  @device_os = os.downcase.to_sym
161
179
  end
@@ -11,6 +11,10 @@ module TestCentricity
11
11
  attr_accessor :parent
12
12
  attr_accessor :parent_list
13
13
  attr_accessor :list_index
14
+ attr_accessor :locator_type
15
+
16
+ XPATH_SELECTORS = ['//', '[@', '[contains(@']
17
+ CSS_SELECTORS = ['#', ':nth-child(', ':nth-of-type(', '^=', '$=', '*=']
14
18
 
15
19
  def initialize(name, parent, locator, context)
16
20
  @name = name
@@ -19,6 +23,18 @@ module TestCentricity
19
23
  @context = context
20
24
  @parent_list = nil
21
25
  @list_index = nil
26
+
27
+ is_xpath = XPATH_SELECTORS.any? { |selector| @locator.include?(selector) }
28
+ is_css = CSS_SELECTORS.any? { |selector| @locator.include?(selector) }
29
+ if is_xpath && !is_css
30
+ @locator_type = :xpath
31
+ elsif is_css && !is_xpath
32
+ @locator_type = :css
33
+ elsif !is_css && !is_xpath
34
+ @locator_type = :css
35
+ else
36
+ raise "Cannot determine type of locator for PageSection '#{@name}' - locator = #{@locator}"
37
+ end
22
38
  end
23
39
 
24
40
  def get_locator
@@ -31,9 +47,10 @@ module TestCentricity
31
47
  unless @parent_list.nil?
32
48
  locator = "#{@parent_list.get_locator}|#{locator}"
33
49
  unless @list_index.nil?
34
- if locator.include?('/')
50
+ case @locator_type
51
+ when :xpath
35
52
  locator = "(#{locator})[#{@list_index}]"
36
- else
53
+ when :css
37
54
  locator = "#{locator}:nth-of-type(#{@list_index})"
38
55
  end
39
56
  end
@@ -46,6 +63,10 @@ module TestCentricity
46
63
  end
47
64
  end
48
65
 
66
+ def get_locator_type
67
+ @locator_type
68
+ end
69
+
49
70
  def set_list_index(list, index = 1)
50
71
  @parent_list = list unless list.nil?
51
72
  @list_index = index
@@ -792,19 +813,10 @@ module TestCentricity
792
813
 
793
814
  def find_section
794
815
  locator = get_locator
795
- tries ||= 2
796
- attributes = [:id, :xpath, :css]
797
- type = attributes[tries]
798
- case type
799
- when :css
800
- locator = locator.delete('|')
801
- when :xpath
802
- locator = locator.delete('|')
803
- end
804
- obj = page.find(type, locator, :wait => 0.1)
805
- [obj, type]
816
+ locator = locator.delete('|')
817
+ obj = page.find(@locator_type, locator, :wait => 0.1)
818
+ [obj, @locator_type]
806
819
  rescue
807
- retry if (tries -= 1) > 0
808
820
  [nil, nil]
809
821
  end
810
822
  end
@@ -23,7 +23,10 @@ module TestCentricity
23
23
  include Test::Unit::Assertions
24
24
 
25
25
  attr_reader :parent, :locator, :context, :type, :name
26
- attr_accessor :alt_locator
26
+ attr_accessor :alt_locator, :locator_type
27
+
28
+ XPATH_SELECTORS = ['//', '[@', '[contains(@']
29
+ CSS_SELECTORS = ['#', ':nth-child(', ':nth-of-type(', '^=', '$=', '*=']
27
30
 
28
31
  def initialize(name, parent, locator, context)
29
32
  @name = name
@@ -32,6 +35,22 @@ module TestCentricity
32
35
  @context = context
33
36
  @type = nil
34
37
  @alt_locator = nil
38
+ set_locator_type
39
+ end
40
+
41
+ def set_locator_type(locator = nil)
42
+ locator = @locator if locator.nil?
43
+ is_xpath = XPATH_SELECTORS.any? { |selector| locator.include?(selector) }
44
+ is_css = CSS_SELECTORS.any? { |selector| locator.include?(selector) }
45
+ if is_xpath && !is_css
46
+ @locator_type = :xpath
47
+ elsif is_css && !is_xpath
48
+ @locator_type = :css
49
+ elsif !is_css && !is_xpath
50
+ @locator_type = :css
51
+ else
52
+ raise "Cannot determine type of locator for UIElement '#{@name}' - locator = #{locator}"
53
+ end
35
54
  end
36
55
 
37
56
  def get_object_type
@@ -66,8 +85,8 @@ module TestCentricity
66
85
  # basket_link.click
67
86
  #
68
87
  def click
69
- obj, = find_element
70
- object_not_found_exception(obj, nil)
88
+ obj, type = find_element
89
+ object_not_found_exception(obj, type)
71
90
  begin
72
91
  obj.click
73
92
  rescue
@@ -81,8 +100,8 @@ module TestCentricity
81
100
  # file_image.double_click
82
101
  #
83
102
  def double_click
84
- obj, = find_element
85
- object_not_found_exception(obj, nil)
103
+ obj, type = find_element
104
+ object_not_found_exception(obj, type)
86
105
  page.driver.browser.action.double_click(obj.native).perform
87
106
  end
88
107
 
@@ -92,8 +111,8 @@ module TestCentricity
92
111
  # basket_item_image.right_click
93
112
  #
94
113
  def right_click
95
- obj, = find_element
96
- object_not_found_exception(obj, nil)
114
+ obj, type = find_element
115
+ object_not_found_exception(obj, type)
97
116
  page.driver.browser.action.context_click(obj.native).perform
98
117
  end
99
118
 
@@ -111,8 +130,8 @@ module TestCentricity
111
130
  end
112
131
 
113
132
  def set(value)
114
- obj, = find_element
115
- object_not_found_exception(obj, nil)
133
+ obj, type = find_element
134
+ object_not_found_exception(obj, type)
116
135
  obj.set(value)
117
136
  end
118
137
 
@@ -123,8 +142,8 @@ module TestCentricity
123
142
  # comment_field.send_keys(:enter)
124
143
  #
125
144
  def send_keys(*keys)
126
- obj, = find_element
127
- object_not_found_exception(obj, nil)
145
+ obj, type = find_element
146
+ object_not_found_exception(obj, type)
128
147
  obj.send_keys(*keys)
129
148
  end
130
149
 
@@ -164,7 +183,11 @@ module TestCentricity
164
183
  invisible = !obj.visible? if exists
165
184
  end
166
185
  # the object is visible if it exists and it is not invisible
167
- exists && !invisible ? true : false
186
+ if exists && !invisible
187
+ true
188
+ else
189
+ false
190
+ end
168
191
  end
169
192
 
170
193
  # Is UI object hidden (not visible)?
@@ -194,8 +217,8 @@ module TestCentricity
194
217
  # login_button.disabled?
195
218
  #
196
219
  def disabled?
197
- obj, = find_element
198
- object_not_found_exception(obj, nil)
220
+ obj, type = find_element
221
+ object_not_found_exception(obj, type)
199
222
  obj.disabled?
200
223
  end
201
224
 
@@ -285,8 +308,8 @@ module TestCentricity
285
308
  end
286
309
 
287
310
  def get_value(visible = true)
288
- obj, = find_element(visible)
289
- object_not_found_exception(obj, nil)
311
+ obj, type = find_element(visible)
312
+ object_not_found_exception(obj, type)
290
313
  case obj.tag_name.downcase
291
314
  when 'input', 'select', 'textarea'
292
315
  obj.value
@@ -312,35 +335,37 @@ module TestCentricity
312
335
  # basket_link.hover
313
336
  #
314
337
  def hover
315
- obj, = find_element
316
- object_not_found_exception(obj, nil)
338
+ obj, type = find_element
339
+ object_not_found_exception(obj, type)
317
340
  obj.hover
318
341
  end
319
342
 
320
343
  def drag_by(right_offset, down_offset)
321
- obj, = find_element
322
- object_not_found_exception(obj, nil)
344
+ obj, type = find_element
345
+ object_not_found_exception(obj, type)
346
+ page.driver.browser.action.click_and_hold(obj.native).perform
347
+ sleep(1)
323
348
  obj.drag_by(right_offset, down_offset)
324
349
  end
325
350
 
326
351
  def drag_and_drop(target, right_offset = nil, down_offset = nil)
327
- source, = find_element
328
- object_not_found_exception(source, nil)
352
+ source, type = find_element
353
+ object_not_found_exception(source, type)
329
354
  page.driver.browser.action.click_and_hold(source.native).perform
330
- sleep(0.5)
355
+ sleep(1)
331
356
  target_drop, = target.find_element
332
357
  page.driver.browser.action.move_to(target_drop.native, right_offset.to_i, down_offset.to_i).release.perform
333
358
  end
334
359
 
335
360
  def get_attribute(attrib)
336
- obj, = find_element(false)
337
- object_not_found_exception(obj, nil)
361
+ obj, type = find_element(false)
362
+ object_not_found_exception(obj, type)
338
363
  obj[attrib]
339
364
  end
340
365
 
341
366
  def get_native_attribute(attrib)
342
- obj, = find_element(false)
343
- object_not_found_exception(obj, nil)
367
+ obj, type = find_element(false)
368
+ object_not_found_exception(obj, type)
344
369
  obj.native.attribute(attrib)
345
370
  end
346
371
 
@@ -354,43 +379,17 @@ module TestCentricity
354
379
  def find_object(visible = true)
355
380
  @alt_locator.nil? ? obj_locator = @locator : obj_locator = @alt_locator
356
381
  parent_section = @context == :section && !@parent.get_locator.nil?
357
- if parent_section
358
- attributes = [:id, :ignore_parent_xpath, :ignore_parent_css, :xpath_css, :css_xpath, :xpath, :css]
359
- tries ||= 6
360
- else
361
- attributes = [:id, :xpath, :css]
362
- tries ||= 2
363
- end
382
+ parent_section ? tries ||= 2 : tries ||= 1
364
383
 
365
- type = attributes[tries]
366
- if parent_section
384
+ if parent_section && tries > 1
367
385
  parent_locator = @parent.get_locator
368
- case type
369
- when :css
370
- parent_locator = parent_locator.gsub('|', ' ')
371
- obj = page.find(:css, parent_locator, :wait => 0.01).find(:css, obj_locator, :wait => 0.01, :visible => visible)
372
- when :xpath
373
- parent_locator = parent_locator.delete('|')
374
- obj = page.find(:xpath, "#{parent_locator}#{obj_locator}", :wait => 0.01, :visible => visible)
375
- when :css_xpath
376
- type = :xpath
377
- parent_locator = parent_locator.gsub('|', ' ')
378
- obj = page.find(:css, parent_locator, :wait => 0.01).find(:xpath, obj_locator, :wait => 0.01, :visible => visible)
379
- when :xpath_css
380
- type = :css
381
- parent_locator = parent_locator.gsub('|', ' ')
382
- obj = page.find(:xpath, parent_locator, :wait => 0.01).find(:css, obj_locator, :wait => 0.01, :visible => visible)
383
- when :ignore_parent_css
384
- type = :css
385
- obj = page.find(:css, obj_locator, :wait => 0.01, :visible => visible)
386
- when :ignore_parent_xpath
387
- type = :xpath
388
- obj = page.find(:xpath, obj_locator, :wait => 0.01, :visible => visible)
389
- end
386
+ parent_locator = parent_locator.gsub('|', ' ')
387
+ parent_locator_type = @parent.get_locator_type
388
+ obj = page.find(parent_locator_type, parent_locator, :wait => 0.01).find(@locator_type, obj_locator, :wait => 0.01, :visible => visible)
390
389
  else
391
- obj = page.find(type, obj_locator, :wait => 0.01, :visible => visible)
390
+ obj = page.find(@locator_type, obj_locator, :wait => 0.01, :visible => visible)
392
391
  end
393
- [obj, type]
392
+ [obj, @locator_type]
394
393
  rescue
395
394
  retry if (tries -= 1) > 0
396
395
  [nil, nil]
@@ -1,3 +1,3 @@
1
1
  module TestCentricityWeb
2
- VERSION = '2.1.10'
2
+ VERSION = '2.2.0'
3
3
  end
@@ -6,6 +6,8 @@ module TestCentricity
6
6
  module WebDriverConnect
7
7
  include Capybara::DSL
8
8
 
9
+ attr_accessor :webdriver_path
10
+
9
11
  def self.initialize_web_driver(app_host = nil)
10
12
  Capybara.app_host = app_host unless app_host.nil?
11
13
  browser = ENV['WEB_BROWSER']
@@ -14,7 +16,7 @@ module TestCentricity
14
16
  Environ.platform = :desktop
15
17
  Environ.browser = browser
16
18
  Environ.device = false
17
- Environ.device_type = 'browser'
19
+ Environ.device_name = 'browser'
18
20
 
19
21
  case browser.downcase.to_sym
20
22
  when :appium
@@ -50,6 +52,7 @@ module TestCentricity
50
52
  initialize_browser_size
51
53
  end
52
54
 
55
+ Environ.session_state = :running
53
56
  puts "Using #{Environ.browser} browser via #{context}"
54
57
  end
55
58
 
@@ -57,7 +60,7 @@ module TestCentricity
57
60
  Capybara.app_host = url
58
61
  end
59
62
 
60
- # Set the WebDriver path for Chrome, IE, or Edge browsers
63
+ # Set the WebDriver path for Chrome, Firefox, IE, or Edge browsers
61
64
  def self.set_webdriver_path(project_path)
62
65
  path_to_driver = nil
63
66
  # check for existence of /webdrivers or /features/support/drivers folders
@@ -76,31 +79,75 @@ module TestCentricity
76
79
  elsif OS.windows?
77
80
  path_to_driver = 'windows/chromedriver.exe'
78
81
  end
79
- Selenium::WebDriver::Chrome.driver_path = File.join(project_path, base_path, path_to_driver)
82
+ @webdriver_path = File.join(project_path, base_path, path_to_driver)
83
+ Selenium::WebDriver::Chrome.driver_path = @webdriver_path
80
84
  # when :firefox
81
85
  # if OS.osx?
82
86
  # path_to_driver = 'mac/geckodriver'
83
87
  # elsif OS.windows?
84
88
  # path_to_driver = 'windows/geckodriver.exe'
85
89
  # end
86
- # Selenium::WebDriver::Firefox.driver_path = File.join(project_path, base_path, path_to_driver)
90
+ # @webdriver_path = File.join(project_path, base_path, path_to_driver)
91
+ # Selenium::WebDriver::Firefox.driver_path = @webdriver_path
87
92
  when :ie
88
93
  path_to_driver = 'windows/IEDriverServer.exe'
89
- Selenium::WebDriver::IE.driver_path = File.join(project_path, base_path, path_to_driver)
94
+ @webdriver_path = File.join(project_path, base_path, path_to_driver)
95
+ Selenium::WebDriver::IE.driver_path = @webdriver_path
90
96
  when :edge
91
97
  path_to_driver = 'windows/MicrosoftWebDriver.exe'
92
- Selenium::WebDriver::Edge.driver_path = File.join(project_path, base_path, path_to_driver)
98
+ @webdriver_path = File.join(project_path, base_path, path_to_driver)
99
+ Selenium::WebDriver::Edge.driver_path = @webdriver_path
93
100
  else
94
- if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
95
- if OS.osx?
96
- path_to_driver = 'mac/chromedriver'
97
- elsif OS.windows?
98
- path_to_driver = 'windows/chromedriver.exe'
101
+ if ENV['HOST_BROWSER']
102
+ case ENV['HOST_BROWSER'].downcase.to_sym
103
+ when :chrome
104
+ if OS.osx?
105
+ path_to_driver = 'mac/chromedriver'
106
+ elsif OS.windows?
107
+ path_to_driver = 'windows/chromedriver.exe'
108
+ end
109
+ @webdriver_path = File.join(project_path, base_path, path_to_driver)
110
+ Selenium::WebDriver::Chrome.driver_path = @webdriver_path
111
+ # when :firefox
112
+ # if OS.osx?
113
+ # path_to_driver = 'mac/geckodriver'
114
+ # elsif OS.windows?
115
+ # path_to_driver = 'windows/geckodriver.exe'
116
+ # end
117
+ # @webdriver_path = File.join(project_path, base_path, path_to_driver)
118
+ # Selenium::WebDriver::Firefox.driver_path = @webdriver_path
99
119
  end
100
- Selenium::WebDriver::Chrome.driver_path = File.join(project_path, base_path, path_to_driver)
101
120
  end
102
121
  end
103
- puts "The webdriver path is: #{File.join(project_path, base_path, path_to_driver)}" unless path_to_driver.nil?
122
+ puts "The webdriver path is: #{@webdriver_path}" unless path_to_driver.nil?
123
+ end
124
+
125
+ def self.initialize_browser_size
126
+ # tile browser windows if running in multiple parallel threads and BROWSER_TILE environment variable is true
127
+ if ENV['PARALLEL'] && ENV['BROWSER_TILE']
128
+ thread = ENV['TEST_ENV_NUMBER'].to_i
129
+ if thread > 1
130
+ Browsers.set_browser_window_position(100 * thread - 1, 100 * thread - 1)
131
+ sleep(1)
132
+ end
133
+ else
134
+ Browsers.set_browser_window_position(50, 50)
135
+ sleep(1)
136
+ end
137
+
138
+ browser = Environ.browser.to_s
139
+ if Environ.is_desktop?
140
+ if ENV['BROWSER_SIZE'] == 'max'
141
+ Browsers.maximize_browser
142
+ elsif ENV['BROWSER_SIZE']
143
+ Browsers.set_browser_window_size(ENV['BROWSER_SIZE'])
144
+ else
145
+ Browsers.set_browser_window_size(Browsers.browser_size(browser, ENV['ORIENTATION']))
146
+ end
147
+ elsif Environ.is_mobile? && !Environ.is_device?
148
+ Browsers.set_browser_window_size(Browsers.browser_size(browser, ENV['ORIENTATION']))
149
+ end
150
+ Environ.session_state = :running
104
151
  end
105
152
 
106
153
  private
@@ -108,7 +155,7 @@ module TestCentricity
108
155
  def self.initialize_appium
109
156
  Environ.device = true
110
157
  Environ.platform = :mobile
111
- Environ.device_type = ENV['APP_DEVICE']
158
+ Environ.device_name = ENV['APP_DEVICE']
112
159
  Environ.device_os = ENV['APP_PLATFORM_NAME']
113
160
  Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
114
161
  Capybara.default_driver = :appium
@@ -148,48 +195,113 @@ module TestCentricity
148
195
  browser = ENV['WEB_BROWSER']
149
196
 
150
197
  case browser.downcase.to_sym
151
- when :firefox, :chrome, :ie, :safari, :edge
152
- Environ.platform = :desktop
153
- else
154
- Environ.platform = :mobile
155
- Environ.device_type = Browsers.mobile_device_name(browser)
198
+ when :firefox, :chrome, :ie, :safari, :edge
199
+ Environ.platform = :desktop
200
+ else
201
+ Environ.platform = :mobile
202
+ Environ.device_name = Browsers.mobile_device_name(browser)
156
203
  end
157
204
 
158
205
  Capybara.default_driver = :selenium
159
206
  Capybara.register_driver :selenium do |app|
160
207
  case browser.downcase.to_sym
161
- when :ie, :safari, :edge
162
- Capybara::Selenium::Driver.new(app, :browser => browser.to_sym)
208
+ when :ie, :safari, :edge
209
+ Capybara::Selenium::Driver.new(app, :browser => browser.to_sym)
210
+
211
+ when :firefox
212
+ if ENV['LOCALE']
213
+ profile = Selenium::WebDriver::Firefox::Profile.new
214
+ profile['intl.accept_languages'] = ENV['LOCALE']
215
+ Capybara::Selenium::Driver.new(app, :profile => profile)
216
+ else
217
+ Capybara::Selenium::Driver.new(app, :browser => :firefox)
218
+ end
219
+
220
+ when :chrome
221
+ ENV['LOCALE'] ? args = ['--disable-infobars', "--lang=#{ENV['LOCALE']}"] : args = ['--disable-infobars']
222
+ Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
163
223
 
164
- when :firefox
165
- if ENV['LOCALE']
166
- profile = Selenium::WebDriver::Firefox::Profile.new
167
- profile['intl.accept_languages'] = ENV['LOCALE']
168
- Capybara::Selenium::Driver.new(app, :profile => profile)
169
224
  else
170
- Capybara::Selenium::Driver.new(app, :browser => :firefox)
171
- end
225
+ user_agent = Browsers.mobile_device_agent(browser)
226
+ ENV['HOST_BROWSER'] ? host_browser = ENV['HOST_BROWSER'].downcase.to_sym : host_browser = :firefox
227
+ case host_browser
228
+ when :firefox
229
+ profile = Selenium::WebDriver::Firefox::Profile.new
230
+ profile['general.useragent.override'] = user_agent
231
+ profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
232
+ Capybara::Selenium::Driver.new(app, :profile => profile)
233
+
234
+ when :chrome
235
+ ENV['LOCALE'] ?
236
+ args = ["--user-agent='#{user_agent}'", "--lang=#{ENV['LOCALE']}", '--disable-infobars'] :
237
+ args = ["--user-agent='#{user_agent}'", '--disable-infobars']
238
+ Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
239
+ end
240
+ end
241
+ end
242
+ end
172
243
 
173
- when :chrome
174
- ENV['LOCALE'] ? args = ['--disable-infobars', "--lang=#{ENV['LOCALE']}"] : args = ['--disable-infobars']
175
- Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
244
+ def self.new_initialize_local_browser
245
+ if OS.osx?
246
+ Environ.os = 'OS X'
247
+ elsif OS.windows?
248
+ Environ.os = 'Windows'
249
+ end
176
250
 
251
+ browser = ENV['WEB_BROWSER']
252
+
253
+ case browser.downcase.to_sym
254
+ when :firefox, :chrome, :ie, :safari, :edge
255
+ Environ.platform = :desktop
177
256
  else
178
- user_agent = Browsers.mobile_device_agent(browser)
179
- ENV['HOST_BROWSER'] ? host_browser = ENV['HOST_BROWSER'].downcase.to_sym : host_browser = :firefox
180
- case host_browser
257
+ Environ.platform = :mobile
258
+ Environ.device_name = Browsers.mobile_device_name(browser)
259
+ end
260
+
261
+ Capybara.default_driver = :selenium
262
+ Capybara.register_driver :selenium do |app|
263
+ case browser.downcase.to_sym
264
+ when :ie, :safari, :edge
265
+ Capybara::Selenium::Driver.new(app, browser: browser.to_sym)
181
266
  when :firefox
182
267
  profile = Selenium::WebDriver::Firefox::Profile.new
183
- profile['general.useragent.override'] = user_agent
268
+ profile['browser.download.dir'] = '/tmp/webdriver-downloads'
269
+ profile['browser.download.folderList'] = 2
270
+ profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv, application/x-msexcel, application/excel, application/x-excel, application/vnd.ms-excel, image/png, image/jpeg, text/html, text/plain, application/pdf, application/octet-stream'
271
+ profile['pdfjs.disabled'] = true
184
272
  profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
185
- Capybara::Selenium::Driver.new(app, :profile => profile)
186
-
273
+ options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
274
+ if @webdriver_path.blank?
275
+ Capybara::Selenium::Driver.new(app, browser: :firefox, options: options)
276
+ else
277
+ Capybara::Selenium::Driver.new(app, browser: :firefox, options: options, driver_path: @webdriver_path)
278
+ end
187
279
  when :chrome
188
- ENV['LOCALE'] ?
189
- args = ["--user-agent='#{user_agent}'", "--lang=#{ENV['LOCALE']}", '--disable-infobars'] :
190
- args = ["--user-agent='#{user_agent}'", '--disable-infobars']
191
- Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
192
- end
280
+ options = Selenium::WebDriver::Chrome::Options.new
281
+ options.add_argument('--disable-infobars')
282
+ options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
283
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
284
+ else
285
+ user_agent = Browsers.mobile_device_agent(browser)
286
+ ENV['HOST_BROWSER'] ? host_browser = ENV['HOST_BROWSER'].downcase.to_sym : host_browser = :firefox
287
+ case host_browser
288
+ when :firefox
289
+ profile = Selenium::WebDriver::Firefox::Profile.new
290
+ profile['general.useragent.override'] = user_agent
291
+ profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
292
+ options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
293
+ if @webdriver_path.blank?
294
+ Capybara::Selenium::Driver.new(app, browser: :firefox, options: options)
295
+ else
296
+ Capybara::Selenium::Driver.new(app, browser: :firefox, options: options, driver_path: @webdriver_path)
297
+ end
298
+ when :chrome
299
+ options = Selenium::WebDriver::Chrome::Options.new
300
+ options.add_argument('--disable-infobars')
301
+ options.add_argument("--user-agent='#{user_agent}'")
302
+ options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
303
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
304
+ end
193
305
  end
194
306
  end
195
307
  end
@@ -200,9 +312,10 @@ module TestCentricity
200
312
  if ENV['BS_REAL_MOBILE'] || ENV['BS_PLATFORM']
201
313
  Environ.platform = :mobile
202
314
  Environ.device = true
203
- Environ.device_type = ENV['BS_DEVICE']
315
+ Environ.device_name = ENV['BS_DEVICE']
204
316
  Environ.device_os = ENV['BS_OS']
205
317
  Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
318
+ Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
206
319
 
207
320
  elsif ENV['BS_OS']
208
321
  Environ.os = "#{ENV['BS_OS']} #{ENV['BS_OS_VERSION']}"
@@ -262,7 +375,7 @@ module TestCentricity
262
375
  capabilities['javascriptEnabled'] = 'true'
263
376
  capabilities['cleanSession'] = 'true'
264
377
  end
265
- Capybara::Selenium::Driver.new(app, :browser => :remote, :url => endpoint, :desired_capabilities => capabilities)
378
+ Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
266
379
  end
267
380
 
268
381
  Environ.browser = browser
@@ -278,9 +391,10 @@ module TestCentricity
278
391
  Environ.os = ENV['CB_OS']
279
392
  Environ.platform = :desktop
280
393
  elsif ENV['CB_PLATFORM']
281
- Environ.device_type = ENV['CB_PLATFORM']
394
+ Environ.device_name = ENV['CB_PLATFORM']
282
395
  Environ.device = true
283
396
  Environ.platform = :mobile
397
+ Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
284
398
  end
285
399
 
286
400
  endpoint = "http://#{ENV['CB_USERNAME']}:#{ENV['CB_AUTHKEY']}@hub.crossbrowsertesting.com:80/wd/hub"
@@ -296,7 +410,7 @@ module TestCentricity
296
410
  elsif ENV['CB_PLATFORM']
297
411
  capabilities['os_api_name'] = ENV['CB_PLATFORM']
298
412
  end
299
- Capybara::Selenium::Driver.new(app, :browser => :remote, :url => endpoint, :desired_capabilities => capabilities)
413
+ Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
300
414
  end
301
415
 
302
416
  Environ.browser = browser
@@ -317,12 +431,12 @@ module TestCentricity
317
431
  Capybara.default_driver = :poltergeist
318
432
  Capybara.register_driver :poltergeist do |app|
319
433
  options = {
320
- :js_errors => true,
321
- :timeout => 120,
322
- :debug => false,
323
- :phantomjs_options => ['--load-images=no', '--disk-cache=false'],
324
- :inspector => true,
325
- :window_size => [width, height]
434
+ js_errors: true,
435
+ timeout: 120,
436
+ debug: false,
437
+ phantomjs_options: ['--load-images=no', '--disk-cache=false'],
438
+ inspector: true,
439
+ window_size: [width, height]
326
440
  }
327
441
  Capybara::Poltergeist::Driver.new(app, options)
328
442
  end
@@ -333,7 +447,7 @@ module TestCentricity
333
447
  endpoint = ENV['REMOTE_ENDPOINT'] || 'http://127.0.0.1:4444/wd/hub'
334
448
  capabilities = Selenium::WebDriver::Remote::Capabilities.send(browser.downcase.to_sym)
335
449
  Capybara.register_driver :remote_browser do |app|
336
- Capybara::Selenium::Driver.new(app, :browser => :remote, :url => endpoint, :desired_capabilities => capabilities)
450
+ Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
337
451
  end
338
452
  Capybara.current_driver = :remote_browser
339
453
  Capybara.default_driver = :remote_browser
@@ -346,7 +460,7 @@ module TestCentricity
346
460
  Environ.platform = :desktop
347
461
  Environ.os = ENV['SL_OS']
348
462
  elsif ENV['SL_PLATFORM']
349
- Environ.device_type = ENV['SL_DEVICE']
463
+ Environ.device_name = ENV['SL_DEVICE']
350
464
  Environ.platform = :mobile
351
465
  end
352
466
 
@@ -368,7 +482,7 @@ module TestCentricity
368
482
  capabilities['deviceOrientation'] = ENV['ORIENTATION'] if ENV['ORIENTATION']
369
483
  end
370
484
 
371
- Capybara::Selenium::Driver.new(app, :browser => :remote, :url => endpoint, :desired_capabilities => capabilities)
485
+ Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
372
486
  end
373
487
 
374
488
  Environ.browser = browser
@@ -386,9 +500,10 @@ module TestCentricity
386
500
  Environ.device_orientation = ENV['ORIENTATION']
387
501
  end
388
502
  Environ.device_os = ENV['TB_PLATFORM']
389
- Environ.device_type = ENV['TB_DEVICE']
503
+ Environ.device_name = ENV['TB_DEVICE']
390
504
  Environ.device = true
391
505
  Environ.platform = :mobile
506
+ Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
392
507
  else
393
508
  Environ.platform = :desktop
394
509
  end
@@ -414,7 +529,7 @@ module TestCentricity
414
529
  capabilities['deviceName'] = ENV['TB_DEVICE']
415
530
  end
416
531
 
417
- Capybara::Selenium::Driver.new(app, :browser => :remote, :url => endpoint, :desired_capabilities => capabilities)
532
+ Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
418
533
  end
419
534
 
420
535
  Environ.browser = browser
@@ -423,29 +538,5 @@ module TestCentricity
423
538
  Capybara.run_server = false
424
539
 
425
540
  end
426
-
427
- def self.initialize_browser_size
428
- # tile browser windows if running in multiple parallel threads and BROWSER_TILE environment variable is true
429
- if ENV['PARALLEL'] && ENV['BROWSER_TILE']
430
- thread = ENV['TEST_ENV_NUMBER'].to_i
431
- if thread > 1
432
- Browsers.set_browser_window_position(100 * thread - 1, 100 * thread - 1)
433
- sleep(1)
434
- end
435
- end
436
-
437
- browser = Environ.browser.to_s
438
- if Environ.is_desktop?
439
- if ENV['BROWSER_SIZE'] == 'max'
440
- Browsers.maximize_browser
441
- elsif ENV['BROWSER_SIZE']
442
- Browsers.set_browser_window_size(ENV['BROWSER_SIZE'])
443
- else
444
- Browsers.set_browser_window_size(Browsers.browser_size(browser, ENV['ORIENTATION']))
445
- end
446
- elsif Environ.is_mobile? && !Environ.is_device?
447
- Browsers.set_browser_window_size(Browsers.browser_size(browser, ENV['ORIENTATION']))
448
- end
449
- end
450
541
  end
451
542
  end