watir 7.0.0.beta3 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/chrome.yml +34 -0
  3. data/.github/workflows/edge.yml +28 -0
  4. data/.github/workflows/firefox.yml +35 -0
  5. data/.github/workflows/ie.yml +24 -0
  6. data/.github/workflows/safari.yml +27 -0
  7. data/.github/workflows/unit.yml +52 -0
  8. data/.rubocop.yml +1 -1
  9. data/CHANGES.md +26 -0
  10. data/lib/watir/attribute_helper.rb +1 -1
  11. data/lib/watir/browser.rb +3 -3
  12. data/lib/watir/capabilities.rb +14 -0
  13. data/lib/watir/elements/date_field.rb +4 -1
  14. data/lib/watir/elements/date_time_field.rb +4 -1
  15. data/lib/watir/elements/element.rb +39 -13
  16. data/lib/watir/elements/table.rb +1 -1
  17. data/lib/watir/js_snippets/isElementInViewport.js +20 -0
  18. data/lib/watir/locators/element/selector_builder/xpath.rb +3 -2
  19. data/lib/watir/scroll.rb +2 -1
  20. data/lib/watir/version.rb +1 -1
  21. data/lib/watir/window.rb +22 -0
  22. data/lib/watirspec/remote_server.rb +2 -6
  23. data/spec/unit/capabilities_spec.rb +99 -5
  24. data/spec/watirspec/after_hooks_spec.rb +0 -2
  25. data/spec/watirspec/drag_and_drop_spec.rb +12 -0
  26. data/spec/watirspec/elements/date_time_field_spec.rb +3 -6
  27. data/spec/watirspec/elements/div_spec.rb +12 -1
  28. data/spec/watirspec/elements/element_spec.rb +91 -18
  29. data/spec/watirspec/html/scroll.html +8 -25
  30. data/spec/watirspec/html/sticky_elements.html +10 -0
  31. data/spec/watirspec/scroll_spec.rb +72 -42
  32. data/spec/watirspec/window_switching_spec.rb +40 -14
  33. data/spec/watirspec_helper.rb +2 -0
  34. data/watir.gemspec +3 -3
  35. metadata +24 -18
  36. data/.github/workflows/tests.yml +0 -104
  37. data/spec/watirspec/html/hover.html +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ebf40b52023085fd593f26f448268e0f00c51dbaf80fc3af9801d9d8c9d7703b
4
- data.tar.gz: f42ee61445dc9ab61a6d236597bd67c84a2fdd837a5af0cc2236ae1eb6e19467
3
+ metadata.gz: e8a3f59dcd9f56e63cf532cc2ba8c9605e8ffad78bd59d3f104e6677c9f5e20c
4
+ data.tar.gz: 1f1cb55a4270ebdce957f4a8dc33e76403eef391ed59e3179f4f6772595d3f59
5
5
  SHA512:
6
- metadata.gz: 61cd3f3f3cf9f3d3739ed006de8b41ad4cf60336953b518e9c993e0fafb09c7dd0d7903bbf2099d562987b91ff1aa4b351108b78767ea98b65e6eb53de78f451
7
- data.tar.gz: '09017e544063c107aa91865759b4f61366476178b9c55f6b64f6bc81958eb6236d44621baff328ab4587d752a3e99be169ce9cf4be11443354d48dc019d6b04a'
6
+ metadata.gz: 488c6b2f0a93a20390350da8b95025f9e33d2be9bb7bd84b130808906bca067860b3db6908c59961ef3914ccbb682d2d15d2418656749f8916a1416fa8c6cbb5
7
+ data.tar.gz: 64bc4a7b36c294a75ceb86c3fea21809dbefc158cbca08ba72dc6bf7b3b64d76f04b5c02130a8cce15e78d5156659cb317ee397e27d93d06e537e804695e425b
@@ -0,0 +1,34 @@
1
+ name: Chrome Tests
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ local-tests:
9
+ name: Local Tests
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, macos-latest, windows-latest]
15
+ ruby: [ 2.6, 3.0 ]
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - uses: ./.github/actions/setup-linux
19
+ if: matrix.os == 'ubuntu-latest'
20
+ - uses: ./.github/actions/install-chrome
21
+ if: matrix.os == 'ubuntu-latest'
22
+ - run: |
23
+ echo "COVERAGE=true" >> $GITHUB_ENV
24
+ if: |
25
+ matrix.os == 'ubuntu-latest' ||
26
+ matrix.os == 'macos-latest'
27
+ - uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: ${{ matrix.ruby }}
30
+ - run: bundle install
31
+ - run: |
32
+ bundle exec rake spec:chrome
33
+ env:
34
+ DISPLAY: :99
@@ -0,0 +1,28 @@
1
+ name: Edge Tests
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ local-tests:
9
+ name: Local Tests
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [macos-latest, windows-latest]
15
+ ruby: [ 2.6, 3.0 ]
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - run: |
19
+ echo "COVERAGE=true" >> $GITHUB_ENV
20
+ if: matrix.os == 'macos-latest'
21
+ - uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby }}
24
+ - run: bundle install
25
+ - run: |
26
+ bundle exec rake spec:edge
27
+ env:
28
+ DISPLAY: :99
@@ -0,0 +1,35 @@
1
+ name: Firefox Tests
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ local-tests:
9
+ name: Local Tests
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, macos-latest, windows-latest]
15
+ ruby: [ 2.6, 3.0 ]
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - uses: ./.github/actions/setup-linux
19
+ if: matrix.os == 'ubuntu-latest'
20
+ - uses: browser-actions/setup-firefox@latest
21
+ with:
22
+ firefox-version: '93.0'
23
+ - run: |
24
+ echo "COVERAGE=true" >> $GITHUB_ENV
25
+ if: |
26
+ matrix.os == 'ubuntu-latest' ||
27
+ matrix.os == 'macos-latest'
28
+ - uses: ruby/setup-ruby@v1
29
+ with:
30
+ ruby-version: ${{ matrix.ruby }}
31
+ - run: bundle install
32
+ - run: |
33
+ bundle exec rake spec:firefox
34
+ env:
35
+ DISPLAY: :99
@@ -0,0 +1,24 @@
1
+ name: IE Tests
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ local-tests:
9
+ name: Local Tests
10
+ runs-on: windows-latest
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ ruby: [ 2.6, 3.0 ]
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby }}
20
+ - run: bundle install
21
+ - run: |
22
+ bundle exec rake spec:ie
23
+ env:
24
+ DISPLAY: :99
@@ -0,0 +1,27 @@
1
+ name: Safari Tests
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ local-tests:
9
+ name: Local Tests
10
+ runs-on: macos-latest
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ ruby: [ 2.6, 3.0 ]
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - uses: ./.github/actions/enable-safari
18
+ - run: |
19
+ echo "COVERAGE=true" >> $GITHUB_ENV
20
+ - uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: ${{ matrix.ruby }}
23
+ - run: bundle install
24
+ - run: |
25
+ bundle exec rake spec:safari
26
+ env:
27
+ DISPLAY: :99
@@ -0,0 +1,52 @@
1
+ name: Unit Tests
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ documentation-test:
9
+ name: Yard Doctest
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: 2.6
16
+ - run: bundle install
17
+ - uses: ./.github/actions/install-chrome
18
+ - uses: ./.github/actions/setup-linux
19
+ - run: |
20
+ bundle exec rake yard:doctest
21
+
22
+
23
+ unit-test:
24
+ name: Unit Tests
25
+ runs-on: ubuntu-latest
26
+ strategy:
27
+ fail-fast: false
28
+ matrix:
29
+ ruby: ['2.6', '2.7', '3.0']
30
+ steps:
31
+ - uses: actions/checkout@v2
32
+ - uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+ - run: bundle install
36
+ - uses: ./.github/actions/install-chrome
37
+ - uses: ./.github/actions/setup-linux
38
+ - run: |
39
+ bundle exec rake spec:unit
40
+ env:
41
+ DISPLAY: :99
42
+
43
+ linter-test:
44
+ name: Rubocop Tests
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - uses: actions/checkout@v2
48
+ - uses: ruby/setup-ruby@v1
49
+ with:
50
+ ruby-version: 2.6
51
+ - run: bundle install
52
+ - run: bundle exec rubocop
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.5.8
4
+ TargetRubyVersion: 2.6.8
5
5
  NewCops: enable
6
6
  Exclude:
7
7
  - 'lib/watir/elements/html_elements.rb'
data/CHANGES.md CHANGED
@@ -1,3 +1,29 @@
1
+ ### 7.1.0 (2021-11-15)
2
+
3
+ * Add automatic scroll to `Element#click` with method parameters to ensure element is in viewport
4
+ * Provide `:scroll_to` parameter for element methods implemented with `Actions` class (thanks osadasami #948, #949)
5
+ * Allow `:scroll_to` parameter to accept `nil` argument to avoid automatic scrolling
6
+ * Implement `Element#in_viewport?`
7
+ * Fix but where `Scroll#to` for `Browser` with `:center` argument did not scroll to center of page
8
+ * Change `Element#obscured?` to only scroll when element out of viewport and then scroll to bottom instead of top
9
+
10
+ ### 7.0.0 (2021-10-18)
11
+
12
+ * Requires Selenium 4.0.0+
13
+ * Requires Ruby 2.6+
14
+ * Implement `Window#minimize`
15
+ * Implement `Window#full_screen`
16
+
17
+ ### 7.0.0.beta5 (2021-08-02)
18
+
19
+ * Add support for passing in Proxy and proxy Hash to Capabilities (#933)
20
+ * Trigger change event when setting values on date and date-time fields (#938)
21
+ * Allow user to obtain Capabilities instance from Browser instance
22
+
23
+ ### 7.0.0.beta4 (2021-05-29)
24
+
25
+ * Fix Bug in using negative class names within a collection (#934)
26
+
1
27
  ### 7.0.0.beta3 (2021-05-05)
2
28
 
3
29
  * Fix Bug preventing proper use of vendor extension capabilities
@@ -29,7 +29,7 @@ module Watir
29
29
 
30
30
  def attribute_list
31
31
  @attribute_list ||= (typed_attributes.values.flatten +
32
- ancestors[1..-1].map { |e|
32
+ ancestors[1..].map { |e|
33
33
  e.attribute_list if e.respond_to?(:attribute_list)
34
34
  }.compact.flatten
35
35
  ).uniq
data/lib/watir/browser.rb CHANGED
@@ -12,7 +12,7 @@ module Watir
12
12
  include Scrolling
13
13
 
14
14
  attr_writer :default_context, :original_window, :locator_namespace, :timer
15
- attr_reader :driver, :after_hooks
15
+ attr_reader :driver, :after_hooks, :capabilities
16
16
  alias wd driver # ensures duck typing with Watir::Element
17
17
 
18
18
  class << self
@@ -42,8 +42,8 @@ module Watir
42
42
  def initialize(browser = :chrome, *args)
43
43
  case browser
44
44
  when ::Symbol, String
45
- selenium_args = Capabilities.new(browser, *args).to_args
46
- @driver = Selenium::WebDriver.for(*selenium_args)
45
+ @capabilities = Capabilities.new(browser, *args)
46
+ @driver = Selenium::WebDriver.for(*@capabilities.to_args)
47
47
  when Selenium::WebDriver::Driver
48
48
  @driver = browser
49
49
  else
@@ -74,12 +74,26 @@ module Watir
74
74
  end
75
75
 
76
76
  options.unhandled_prompt_behavior ||= :ignore
77
+ process_proxy_options(options)
77
78
  browser_specific_options(options)
78
79
  raise ArgumentError, "#{@options} are unrecognized arguments for Browser constructor" unless @options.empty?
79
80
 
80
81
  vendor_caps << options
81
82
  end
82
83
 
84
+ def process_proxy_options(options)
85
+ proxy = @options.delete(:proxy)
86
+ return if proxy.nil?
87
+
88
+ proxy &&= Selenium::WebDriver::Proxy.new(proxy) if proxy.is_a?(Hash)
89
+
90
+ unless proxy.is_a?(Selenium::WebDriver::Proxy)
91
+ raise TypeError, "#{proxy} needs to be Selenium Proxy or Hash instance"
92
+ end
93
+
94
+ options.proxy = proxy
95
+ end
96
+
83
97
  def process_vendor_capabilities(opts)
84
98
  return [] unless opts.is_a? Hash
85
99
 
@@ -11,7 +11,10 @@ module Watir
11
11
  raise ArgumentError, message unless [Date, ::Time].include?(date.class)
12
12
 
13
13
  date_string = date.strftime('%Y-%m-%d')
14
- element_call(:wait_for_writable) { execute_js(:setValue, @element, date_string) }
14
+ element_call(:wait_for_writable) do
15
+ execute_js(:setValue, @element, date_string)
16
+ execute_js(:fireEvent, @element, :change)
17
+ end
15
18
  end
16
19
  alias set set!
17
20
  alias value= set
@@ -11,7 +11,10 @@ module Watir
11
11
  raise ArgumentError, message unless [DateTime, ::Time].include?(date.class)
12
12
 
13
13
  date_time_string = date.strftime('%Y-%m-%dT%H:%M')
14
- element_call(:wait_for_writable) { execute_js(:setValue, @element, date_time_string) }
14
+ element_call(:wait_for_writable) do
15
+ execute_js(:setValue, @element, date_time_string)
16
+ execute_js(:fireEvent, @element, :change)
17
+ end
15
18
  end
16
19
  alias set set!
17
20
  alias value= set
@@ -146,9 +146,10 @@ module Watir
146
146
  # @param [:shift, :alt, :control, :command, :meta] modifiers to press while clicking.
147
147
  #
148
148
 
149
- def click(*modifiers)
149
+ def click(*modifiers, scroll_to: :center)
150
150
  element_call(:wait_for_enabled) do
151
151
  if modifiers.any?
152
+ scroll.to(scroll_to) if scroll_to
152
153
  action = driver.action
153
154
  modifiers.each { |mod| action.key_down mod }
154
155
  action.click @element
@@ -202,10 +203,13 @@ module Watir
202
203
  # @example
203
204
  # browser.element(name: "new_user_button").double_click
204
205
  #
206
+ # @example
207
+ # browser.element(name: "new_user_button").double_click(scroll_to: :center)
208
+ #
205
209
 
206
- def double_click
210
+ def double_click(scroll_to: :center)
207
211
  element_call(:wait_for_present) do
208
- scroll.to
212
+ scroll.to(scroll_to) if scroll_to
209
213
  driver.action.double_click(@element).perform
210
214
  end
211
215
  browser.after_hooks.run
@@ -237,12 +241,16 @@ module Watir
237
241
  # @example Click an element with several modifier keys pressed
238
242
  # browser.element(name: "new_user_button").right_click(:shift, :alt)
239
243
  #
240
- # @param [:shift, :alt, :control, :command, :meta] modifiers to press while right clicking.
244
+ # @example Click an element with several modifier keys pressed and scroll position
245
+ # browser.element(name: "new_user_button").right_click(:shift, :alt, scroll_to: :center)
246
+ #
247
+ # @param [:shift, :alt, :control, :command, :meta, scroll_to: :center]
248
+ # modifiers to press while right clicking and scroll position.
241
249
  #
242
250
 
243
- def right_click(*modifiers)
251
+ def right_click(*modifiers, scroll_to: :center)
244
252
  element_call(:wait_for_present) do
245
- scroll.to
253
+ scroll.to(scroll_to) if scroll_to
246
254
  action = driver.action
247
255
  if modifiers.any?
248
256
  modifiers.each { |mod| action.key_down mod }
@@ -264,10 +272,13 @@ module Watir
264
272
  # @example
265
273
  # browser.element(name: "new_user_button").hover
266
274
  #
275
+ # @example
276
+ # browser.element(name: "new_user_button").hover(scroll_to: :center)
277
+ #
267
278
 
268
- def hover
279
+ def hover(scroll_to: :center)
269
280
  element_call(:wait_for_present) do
270
- scroll.to
281
+ scroll.to(scroll_to) if scroll_to
271
282
  driver.action.move_to(@element).perform
272
283
  end
273
284
  end
@@ -280,13 +291,14 @@ module Watir
280
291
  # a = browser.div(id: "draggable")
281
292
  # b = browser.div(id: "droppable")
282
293
  # a.drag_and_drop_on b
294
+ # a.drag_and_drop_on b, scroll_to: :center
283
295
  #
284
296
 
285
- def drag_and_drop_on(other)
297
+ def drag_and_drop_on(other, scroll_to: :center)
286
298
  assert_is_element other
287
299
 
288
300
  value = element_call(:wait_for_present) do
289
- scroll.to
301
+ scroll.to(scroll_to) if scroll_to
290
302
  driver.action
291
303
  .drag_and_drop(@element, other.wd)
292
304
  .perform
@@ -302,13 +314,17 @@ module Watir
302
314
  # @example
303
315
  # browser.div(id: "draggable").drag_and_drop_by 100, 25
304
316
  #
317
+ # @example
318
+ # browser.div(id: "draggable").drag_and_drop_by 100, 25, scroll_to: :center
319
+ #
305
320
  # @param [Integer] right_by
306
321
  # @param [Integer] down_by
322
+ # @param [Symbol] scroll_to
307
323
  #
308
324
 
309
- def drag_and_drop_by(right_by, down_by)
325
+ def drag_and_drop_by(right_by, down_by, scroll_to: :center)
310
326
  element_call(:wait_for_present) do
311
- scroll.to
327
+ scroll.to(scroll_to) if scroll_to
312
328
  driver.action
313
329
  .drag_and_drop_by(@element, right_by, down_by)
314
330
  .perform
@@ -530,11 +546,21 @@ module Watir
530
546
  element_call do
531
547
  return true unless present?
532
548
 
533
- scroll.to
549
+ scroll.to :bottom unless in_viewport?
534
550
  execute_js(:elementObscured, self)
535
551
  end
536
552
  end
537
553
 
554
+ #
555
+ # Returns true if the top of the element is visible in the viewport.
556
+ #
557
+ # @return [Boolean]
558
+ #
559
+
560
+ def in_viewport?
561
+ element_call { execute_js(:isElementInViewport, @element) }
562
+ end
563
+
538
564
  #
539
565
  # Returns given style property of this element.
540
566
  #
@@ -29,7 +29,7 @@ module Watir
29
29
  all_rows = rows.locate
30
30
  header_row = all_rows.first || raise(Error, 'no rows in table')
31
31
 
32
- all_rows.entries[1..-1].map do |row|
32
+ all_rows.entries[1..].map do |row|
33
33
  cell_size_check(header_row, row)
34
34
  Hash[headers(header_row).map(&:text).zip(row.cells.map(&:text))]
35
35
  end
@@ -0,0 +1,20 @@
1
+ function(){
2
+ var el = arguments[0];
3
+ var top = el.offsetTop;
4
+ var left = el.offsetLeft;
5
+ var width = el.offsetWidth;
6
+ var height = el.offsetHeight;
7
+
8
+ while (el.offsetParent) {
9
+ el = el.offsetParent;
10
+ top += el.offsetTop;
11
+ left += el.offsetLeft;
12
+ }
13
+
14
+ return (
15
+ top < (window.pageYOffset + window.innerHeight) &&
16
+ left < (window.pageXOffset + window.innerWidth) &&
17
+ (top + height) > window.pageYOffset &&
18
+ (left + width) > window.pageXOffset
19
+ );
20
+ }
@@ -172,7 +172,7 @@ module Watir
172
172
  end
173
173
 
174
174
  def starts_with?(results, regexp)
175
- regexp.source[0] == '^' && results.first == regexp.source[1..-1]
175
+ regexp.source[0] == '^' && results.first == regexp.source[1..]
176
176
  end
177
177
 
178
178
  def add_to_matching(key, regexp, results = nil)
@@ -218,7 +218,8 @@ module Watir
218
218
 
219
219
  def equal_pair(key, value)
220
220
  if key == :class
221
- negate_xpath = value =~ /^!/ && value.slice!(0)
221
+ negate_xpath = value =~ /^!/
222
+ value = value[1..] if negate_xpath
222
223
  expression = "contains(concat(' ', @class, ' '), #{XpathSupport.escape " #{value} "})"
223
224
 
224
225
  negate_xpath ? "not(#{expression})" : expression
data/lib/watir/scroll.rb CHANGED
@@ -58,7 +58,8 @@ module Watir
58
58
  when :top, :start
59
59
  'window.scrollTo(0, 0);'
60
60
  when :center
61
- 'window.scrollTo(window.outerWidth / 2, window.outerHeight / 2);'
61
+ y = '(document.body.scrollHeight - window.innerHeight) / 2 + document.body.getBoundingClientRect().top'
62
+ "window.scrollTo(window.outerWidth / 2, #{y});"
62
63
  when :bottom, :end
63
64
  'window.scrollTo(0, document.body.scrollHeight);'
64
65
  when Array
data/lib/watir/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Watir
2
- VERSION = '7.0.0.beta3'.freeze
2
+ VERSION = '7.1.0'.freeze
3
3
  end
data/lib/watir/window.rb CHANGED
@@ -92,6 +92,28 @@ module Watir
92
92
  use { @driver.manage.window.maximize }
93
93
  end
94
94
 
95
+ #
96
+ # Minimize window.
97
+ #
98
+ # @example
99
+ # browser.window.minimize
100
+ #
101
+
102
+ def minimize
103
+ use { @driver.manage.window.minimize }
104
+ end
105
+
106
+ #
107
+ # Make window full screen.
108
+ #
109
+ # @example
110
+ # browser.window.full_screen
111
+ #
112
+
113
+ def full_screen
114
+ use { @driver.manage.window.full_screen }
115
+ end
116
+
95
117
  #
96
118
  # Returns true if window exists.
97
119
  #
@@ -20,14 +20,10 @@ module WatirSpec
20
20
  private
21
21
 
22
22
  def jar
23
- if ENV['LOCAL_SELENIUM']
24
- local = File.expand_path('../selenium/buck-out/gen/java/server/src/org/openqa/grid/selenium/selenium.jar')
25
- end
26
-
27
23
  if File.exist?(ENV['REMOTE_SERVER_BINARY'] || '')
28
24
  ENV['REMOTE_SERVER_BINARY']
29
- elsif ENV['LOCAL_SELENIUM'] && File.exist?(local)
30
- local
25
+ elsif ENV['LOCAL_SELENIUM']
26
+ File.expand_path('../selenium/bazel-bin/java/server/src/org/openqa/selenium/grid/selenium_server_deploy.jar')
31
27
  elsif !Dir.glob('*selenium*.jar').empty?
32
28
  Dir.glob('*selenium*.jar').first
33
29
  else