selenium-webdriver 2.53.4 → 3.8.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.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +363 -10
  3. data/LICENSE +1 -1
  4. data/README.md +2 -3
  5. data/lib/selenium-webdriver.rb +0 -2
  6. data/lib/selenium/server.rb +69 -70
  7. data/lib/selenium/webdriver.rb +32 -23
  8. data/lib/selenium/webdriver/atoms.rb +18 -0
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +8 -0
  10. data/lib/selenium/webdriver/chrome.rb +8 -6
  11. data/lib/selenium/webdriver/chrome/driver.rb +112 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +168 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +17 -17
  14. data/lib/selenium/webdriver/chrome/service.rb +22 -89
  15. data/lib/selenium/webdriver/common.rb +13 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +49 -57
  17. data/lib/selenium/webdriver/common/alert.rb +5 -15
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +10 -17
  19. data/lib/selenium/webdriver/common/driver.rb +53 -68
  20. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_addons.rb} +13 -23
  21. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +4 -8
  22. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -7
  23. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +0 -4
  24. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +0 -4
  25. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +1 -5
  26. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +0 -5
  27. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +4 -9
  28. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +7 -7
  29. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +2 -7
  30. data/lib/selenium/webdriver/common/element.rb +57 -39
  31. data/lib/selenium/webdriver/common/error.rb +204 -106
  32. data/lib/selenium/webdriver/common/file_reaper.rb +3 -11
  33. data/lib/selenium/webdriver/common/html5/local_storage.rb +6 -10
  34. data/lib/selenium/webdriver/common/html5/session_storage.rb +6 -10
  35. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +7 -18
  36. data/lib/selenium/webdriver/{safari/options.rb → common/interactions/input_device.rb} +20 -31
  37. data/lib/selenium/webdriver/common/interactions/interaction.rb +50 -0
  38. data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +16 -15
  39. data/lib/selenium/webdriver/common/interactions/key_actions.rb +143 -0
  40. data/lib/selenium/webdriver/common/interactions/key_input.rb +62 -0
  41. data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +11 -6
  42. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +353 -0
  43. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +132 -0
  44. data/lib/selenium/webdriver/common/keyboard.rb +7 -14
  45. data/lib/selenium/webdriver/common/keys.rb +99 -82
  46. data/lib/selenium/webdriver/common/log_entry.rb +3 -6
  47. data/lib/selenium/webdriver/common/logger.rb +140 -0
  48. data/lib/selenium/webdriver/common/logs.rb +2 -6
  49. data/lib/selenium/webdriver/common/mouse.rb +9 -14
  50. data/lib/selenium/webdriver/common/navigation.rb +2 -6
  51. data/lib/selenium/webdriver/common/options.rb +20 -23
  52. data/lib/selenium/webdriver/common/platform.rb +70 -97
  53. data/lib/selenium/webdriver/common/port_prober.rb +3 -4
  54. data/lib/selenium/webdriver/common/profile_helper.rb +6 -11
  55. data/lib/selenium/webdriver/common/proxy.rb +58 -72
  56. data/lib/selenium/webdriver/common/search_context.rb +22 -29
  57. data/lib/selenium/webdriver/common/service.rb +161 -0
  58. data/lib/selenium/webdriver/common/socket_lock.rb +6 -14
  59. data/lib/selenium/webdriver/common/socket_poller.rb +5 -12
  60. data/lib/selenium/webdriver/common/target_locator.rb +11 -15
  61. data/lib/selenium/webdriver/common/timeouts.rb +4 -8
  62. data/lib/selenium/webdriver/common/touch_action_builder.rb +2 -6
  63. data/lib/selenium/webdriver/common/touch_screen.rb +19 -23
  64. data/lib/selenium/webdriver/common/w3c_action_builder.rb +209 -0
  65. data/lib/selenium/webdriver/{phantomjs.rb → common/w3c_options.rb} +16 -14
  66. data/lib/selenium/webdriver/common/wait.rb +6 -13
  67. data/lib/selenium/webdriver/common/window.rb +48 -17
  68. data/lib/selenium/webdriver/common/zipper.rb +6 -10
  69. data/lib/selenium/webdriver/edge.rb +5 -12
  70. data/lib/selenium/webdriver/edge/bridge.rb +32 -63
  71. data/lib/selenium/webdriver/edge/driver.rb +73 -0
  72. data/lib/selenium/webdriver/edge/service.rb +18 -87
  73. data/lib/selenium/webdriver/firefox.rb +20 -11
  74. data/lib/selenium/webdriver/firefox/binary.rb +40 -56
  75. data/lib/selenium/webdriver/firefox/driver.rb +48 -0
  76. data/lib/selenium/webdriver/firefox/extension.rb +18 -8
  77. data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -11
  78. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  79. data/lib/selenium/webdriver/firefox/launcher.rb +13 -22
  80. data/lib/selenium/webdriver/firefox/legacy/driver.rb +79 -0
  81. data/lib/selenium/webdriver/{iphone.rb → firefox/marionette/bridge.rb} +25 -6
  82. data/lib/selenium/webdriver/firefox/marionette/driver.rb +96 -0
  83. data/lib/selenium/webdriver/firefox/options.rb +149 -0
  84. data/lib/selenium/webdriver/firefox/profile.rb +46 -46
  85. data/lib/selenium/webdriver/firefox/profiles_ini.rb +8 -18
  86. data/lib/selenium/webdriver/firefox/service.rb +23 -83
  87. data/lib/selenium/webdriver/firefox/util.rb +0 -4
  88. data/lib/selenium/webdriver/ie.rb +4 -8
  89. data/lib/selenium/webdriver/ie/driver.rb +90 -0
  90. data/lib/selenium/webdriver/ie/options.rb +136 -0
  91. data/lib/selenium/webdriver/ie/service.rb +58 -0
  92. data/lib/selenium/webdriver/remote.rb +8 -16
  93. data/lib/selenium/webdriver/remote/bridge.rb +96 -565
  94. data/lib/selenium/webdriver/remote/capabilities.rb +76 -94
  95. data/lib/selenium/webdriver/remote/driver.rb +49 -0
  96. data/lib/selenium/webdriver/remote/http/common.rb +22 -20
  97. data/lib/selenium/webdriver/remote/http/curb.rb +9 -12
  98. data/lib/selenium/webdriver/remote/http/default.rb +54 -41
  99. data/lib/selenium/webdriver/remote/http/persistent.rb +9 -8
  100. data/lib/selenium/webdriver/remote/oss/bridge.rb +586 -0
  101. data/lib/selenium/webdriver/remote/oss/commands.rb +221 -0
  102. data/lib/selenium/webdriver/remote/response.rb +39 -27
  103. data/lib/selenium/webdriver/remote/server_error.rb +1 -5
  104. data/lib/selenium/webdriver/remote/w3c/bridge.rb +573 -0
  105. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +290 -0
  106. data/lib/selenium/webdriver/remote/w3c/commands.rb +148 -0
  107. data/lib/selenium/webdriver/safari.rb +20 -29
  108. data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +21 -30
  109. data/lib/selenium/webdriver/safari/service.rb +57 -0
  110. data/lib/selenium/webdriver/support.rb +1 -2
  111. data/lib/selenium/webdriver/support/abstract_event_listener.rb +17 -4
  112. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -5
  113. data/lib/selenium/webdriver/support/color.rb +57 -42
  114. data/lib/selenium/webdriver/support/escaper.rb +41 -0
  115. data/lib/selenium/webdriver/support/event_firing_bridge.rb +36 -40
  116. data/lib/selenium/webdriver/support/select.rb +33 -86
  117. data/selenium-webdriver.gemspec +22 -25
  118. metadata +254 -261
  119. data/lib/selenium-client.rb +0 -21
  120. data/lib/selenium/client.rb +0 -57
  121. data/lib/selenium/client/base.rb +0 -151
  122. data/lib/selenium/client/driver.rb +0 -29
  123. data/lib/selenium/client/errors.rb +0 -28
  124. data/lib/selenium/client/extensions.rb +0 -132
  125. data/lib/selenium/client/idiomatic.rb +0 -507
  126. data/lib/selenium/client/javascript_expression_builder.rb +0 -135
  127. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
  128. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
  129. data/lib/selenium/client/legacy_driver.rb +0 -1722
  130. data/lib/selenium/client/protocol.rb +0 -123
  131. data/lib/selenium/client/selenium_helper.rb +0 -49
  132. data/lib/selenium/rake/server_task.rb +0 -176
  133. data/lib/selenium/webdriver/android/bridge.rb +0 -68
  134. data/lib/selenium/webdriver/chrome/bridge.rb +0 -139
  135. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
  136. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
  137. data/lib/selenium/webdriver/common/html5/location.rb +0 -19
  138. data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
  139. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  140. data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
  141. data/lib/selenium/webdriver/ie/bridge.rb +0 -88
  142. data/lib/selenium/webdriver/ie/server.rb +0 -133
  143. data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
  144. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
  145. data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
  146. data/lib/selenium/webdriver/remote/commands.rb +0 -211
  147. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
  148. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
  149. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
  150. data/lib/selenium/webdriver/safari/bridge.rb +0 -135
  151. data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
  152. data/lib/selenium/webdriver/safari/server.rb +0 -187
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -19,14 +17,12 @@
19
17
 
20
18
  module Selenium
21
19
  module WebDriver
22
-
23
20
  #
24
21
  # @api private
25
22
  # @see ActionBuilder
26
23
  #
27
24
 
28
25
  class Mouse
29
-
30
26
  def initialize(bridge)
31
27
  @bridge = bridge
32
28
  end
@@ -38,22 +34,22 @@ module Selenium
38
34
 
39
35
  def double_click(element = nil)
40
36
  move_if_needed element
41
- @bridge.doubleClick
37
+ @bridge.double_click
42
38
  end
43
39
 
44
40
  def context_click(element = nil)
45
41
  move_if_needed element
46
- @bridge.contextClick
42
+ @bridge.context_click
47
43
  end
48
44
 
49
45
  def down(element = nil)
50
46
  move_if_needed element
51
- @bridge.mouseDown
47
+ @bridge.mouse_down
52
48
  end
53
49
 
54
50
  def up(element = nil)
55
51
  move_if_needed element
56
- @bridge.mouseUp
52
+ @bridge.mouse_up
57
53
  end
58
54
 
59
55
  #
@@ -68,11 +64,11 @@ module Selenium
68
64
  def move_to(element, right_by = nil, down_by = nil)
69
65
  assert_element element
70
66
 
71
- @bridge.mouseMoveTo element.ref, right_by, down_by
67
+ @bridge.mouse_move_to element.ref, right_by, down_by
72
68
  end
73
69
 
74
70
  def move_by(right_by, down_by)
75
- @bridge.mouseMoveTo nil, Integer(right_by), Integer(down_by)
71
+ @bridge.mouse_move_to nil, Integer(right_by), Integer(down_by)
76
72
  end
77
73
 
78
74
  private
@@ -82,10 +78,9 @@ module Selenium
82
78
  end
83
79
 
84
80
  def assert_element(element)
85
- unless element.kind_of? Element
86
- raise TypeError, "expected #{Element}, got #{element.inspect}:#{element.class}"
87
- end
81
+ return if element.is_a? Element
82
+ raise TypeError, "expected #{Element}, got #{element.inspect}:#{element.class}"
88
83
  end
89
84
  end # Mouse
90
85
  end # WebDriver
91
- end # Selenium
86
+ end # Selenium
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -20,7 +18,6 @@
20
18
  module Selenium
21
19
  module WebDriver
22
20
  class Navigation
23
-
24
21
  def initialize(bridge)
25
22
  @bridge = bridge
26
23
  end
@@ -38,7 +35,7 @@ module Selenium
38
35
  #
39
36
 
40
37
  def back
41
- @bridge.goBack
38
+ @bridge.go_back
42
39
  end
43
40
 
44
41
  #
@@ -46,7 +43,7 @@ module Selenium
46
43
  #
47
44
 
48
45
  def forward
49
- @bridge.goForward
46
+ @bridge.go_forward
50
47
  end
51
48
 
52
49
  #
@@ -56,7 +53,6 @@ module Selenium
56
53
  def refresh
57
54
  @bridge.refresh
58
55
  end
59
-
60
56
  end # Navigation
61
57
  end # WebDriver
62
58
  end # Selenium
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -20,7 +18,6 @@
20
18
  module Selenium
21
19
  module WebDriver
22
20
  class Options
23
-
24
21
  #
25
22
  # @api private
26
23
  #
@@ -43,17 +40,16 @@ module Selenium
43
40
  #
44
41
 
45
42
  def add_cookie(opts = {})
46
- raise ArgumentError, "name is required" unless opts[:name]
47
- raise ArgumentError, "value is required" unless opts[:value]
43
+ raise ArgumentError, 'name is required' unless opts[:name]
44
+ raise ArgumentError, 'value is required' unless opts[:value]
48
45
 
49
- opts[:path] ||= "/"
46
+ opts[:path] ||= '/'
50
47
  opts[:secure] ||= false
51
48
 
52
- if obj = opts.delete(:expires)
53
- opts[:expiry] = seconds_from(obj).to_i
54
- end
49
+ obj = opts.delete(:expires)
50
+ opts[:expiry] = seconds_from(obj).to_i if obj
55
51
 
56
- @bridge.addCookie opts
52
+ @bridge.add_cookie opts
57
53
  end
58
54
 
59
55
  #
@@ -74,7 +70,7 @@ module Selenium
74
70
  #
75
71
 
76
72
  def delete_cookie(name)
77
- @bridge.deleteCookie name
73
+ @bridge.delete_cookie name
78
74
  end
79
75
 
80
76
  #
@@ -82,7 +78,7 @@ module Selenium
82
78
  #
83
79
 
84
80
  def delete_all_cookies
85
- @bridge.deleteAllCookies
81
+ @bridge.delete_all_cookies
86
82
  end
87
83
 
88
84
  #
@@ -92,16 +88,7 @@ module Selenium
92
88
  #
93
89
 
94
90
  def all_cookies
95
- @bridge.getAllCookies.map do |cookie|
96
- {
97
- :name => cookie["name"],
98
- :value => cookie["value"],
99
- :path => cookie["path"],
100
- :domain => cookie["domain"] && strip_port(cookie["domain"]),
101
- :expires => cookie["expiry"] && datetime_at(cookie['expiry']),
102
- :secure => cookie["secure"]
103
- }
104
- end
91
+ @bridge.cookies.map { |cookie| convert_cookie(cookie) }
105
92
  end
106
93
 
107
94
  def timeouts
@@ -146,9 +133,19 @@ module Selenium
146
133
  end
147
134
 
148
135
  def strip_port(str)
149
- str.split(":", 2).first
136
+ str.split(':', 2).first
150
137
  end
151
138
 
139
+ def convert_cookie(cookie)
140
+ {
141
+ name: cookie['name'],
142
+ value: cookie['value'],
143
+ path: cookie['path'],
144
+ domain: cookie['domain'] && strip_port(cookie['domain']),
145
+ expires: cookie['expiry'] && datetime_at(cookie['expiry']),
146
+ secure: cookie['secure']
147
+ }
148
+ end
152
149
  end # Options
153
150
  end # WebDriver
154
151
  end # Selenium
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -22,10 +20,8 @@ require 'socket'
22
20
 
23
21
  module Selenium
24
22
  module WebDriver
25
-
26
23
  # @api private
27
24
  module Platform
28
-
29
25
  module_function
30
26
 
31
27
  def home
@@ -34,53 +30,40 @@ module Selenium
34
30
  end
35
31
 
36
32
  def engine
37
- @engine ||= (
38
- if defined? RUBY_ENGINE
39
- RUBY_ENGINE.to_sym
40
- else
41
- :ruby
42
- end
43
- )
33
+ @engine ||= defined?(RUBY_ENGINE) ? RUBY_ENGINE.to_sym : :ruby
44
34
  end
45
35
 
46
36
  def os
47
- @os ||= (
48
- host_os = RbConfig::CONFIG['host_os']
49
- case host_os
50
- when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
51
- :windows
52
- when /darwin|mac os/
53
- :macosx
54
- when /linux/
55
- :linux
56
- when /solaris|bsd/
57
- :unix
58
- else
59
- raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
60
- end
61
- )
37
+ host_os = RbConfig::CONFIG['host_os']
38
+ @os ||= case host_os
39
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
40
+ :windows
41
+ when /darwin|mac os/
42
+ :macosx
43
+ when /linux/
44
+ :linux
45
+ when /solaris|bsd/
46
+ :unix
47
+ else
48
+ raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
49
+ end
62
50
  end
63
51
 
64
52
  def ci
65
- if ENV['TRAVIS']
66
- :travis
67
- elsif ENV['JENKINS']
68
- :jenkins
69
- end
53
+ return :travis if ENV['TRAVIS']
54
+ :jenkins if ENV['JENKINS']
70
55
  end
71
56
 
72
57
  def bitsize
73
- @bitsize ||= (
74
- if defined?(FFI::Platform::ADDRESS_SIZE)
75
- FFI::Platform::ADDRESS_SIZE
76
- elsif defined?(FFI)
77
- FFI.type_size(:pointer) == 4 ? 32 : 64
78
- elsif jruby?
79
- Integer(ENV_JAVA['sun.arch.data.model'])
80
- else
81
- 1.size == 4 ? 32 : 64
82
- end
83
- )
58
+ @bitsize ||= if defined?(FFI::Platform::ADDRESS_SIZE)
59
+ FFI::Platform::ADDRESS_SIZE
60
+ elsif defined?(FFI)
61
+ FFI.type_size(:pointer) == 4 ? 32 : 64
62
+ elsif jruby?
63
+ Integer(ENV_JAVA['sun.arch.data.model'])
64
+ else
65
+ 1.size == 4 ? 32 : 64
66
+ end
84
67
  end
85
68
 
86
69
  def jruby?
@@ -91,12 +74,8 @@ module Selenium
91
74
  engine == :ironruby
92
75
  end
93
76
 
94
- def ruby187?
95
- !!(RUBY_VERSION =~ /^1\.8\.7/)
96
- end
97
-
98
- def ruby19?
99
- !!(RUBY_VERSION =~ /^1\.9/)
77
+ def ruby_version
78
+ RUBY_VERSION
100
79
  end
101
80
 
102
81
  def windows?
@@ -112,67 +91,65 @@ module Selenium
112
91
  end
113
92
 
114
93
  def cygwin?
115
- !!(RUBY_PLATFORM =~ /cygwin/)
94
+ RUBY_PLATFORM =~ /cygwin/
95
+ !Regexp.last_match.nil?
116
96
  end
117
97
 
118
98
  def null_device
119
- @null_device ||= (
120
- if defined?(File::NULL)
121
- File::NULL
122
- else
123
- Platform.windows? ? 'NUL' : '/dev/null'
124
- end
125
- )
99
+ @null_device ||= if defined?(File::NULL)
100
+ File::NULL
101
+ else
102
+ Platform.windows? ? 'NUL' : '/dev/null'
103
+ end
126
104
  end
127
105
 
128
106
  def wrap_in_quotes_if_necessary(str)
129
- windows? && !cygwin? ? %{"#{str}"} : str
107
+ windows? && !cygwin? ? %("#{str}") : str
130
108
  end
131
109
 
132
110
  def cygwin_path(path, opts = {})
133
111
  flags = []
134
- opts.each { |k,v| flags << "--#{k}" if v }
112
+ opts.each { |k, v| flags << "--#{k}" if v }
135
113
 
136
114
  `cygpath #{flags.join ' '} "#{path}"`.strip
137
115
  end
138
116
 
139
117
  def make_writable(file)
140
- File.chmod 0766, file
118
+ File.chmod 0o766, file
141
119
  end
142
120
 
143
121
  def assert_file(path)
144
- unless File.file? path
145
- raise Error::WebDriverError, "not a file: #{path.inspect}"
146
- end
122
+ return if File.file? path
123
+ raise Error::WebDriverError, "not a file: #{path.inspect}"
147
124
  end
148
125
 
149
126
  def assert_executable(path)
150
127
  assert_file(path)
151
128
 
152
- unless File.executable? path
153
- raise Error::WebDriverError, "not executable: #{path.inspect}"
154
- end
129
+ return if File.executable? path
130
+ raise Error::WebDriverError, "not executable: #{path.inspect}"
155
131
  end
156
132
 
157
- def exit_hook(&blk)
133
+ def exit_hook
158
134
  pid = Process.pid
159
135
 
160
- at_exit do
161
- yield if Process.pid == pid
162
- end
136
+ at_exit { yield if Process.pid == pid }
163
137
  end
164
138
 
165
139
  def find_binary(*binary_names)
166
140
  paths = ENV['PATH'].split(File::PATH_SEPARATOR)
167
- binary_names.map! { |n| "#{n}.exe" } if windows?
141
+
142
+ if windows?
143
+ binary_names.map! { |n| "#{n}.exe" }
144
+ binary_names.dup.each { |n| binary_names << n.gsub('exe', 'bat') }
145
+ end
168
146
 
169
147
  binary_names.each do |binary_name|
170
148
  paths.each do |path|
171
149
  full_path = File.join(path, binary_name)
172
150
  full_path.tr!('\\', '/') if windows?
173
- exe = Dir.glob(full_path).first
174
- next unless exe
175
- return exe if File.executable?(exe)
151
+ exe = Dir.glob(full_path).find { |f| File.executable?(f) }
152
+ return exe if exe
176
153
  end
177
154
  end
178
155
 
@@ -181,8 +158,9 @@ module Selenium
181
158
 
182
159
  def find_in_program_files(*binary_names)
183
160
  paths = [
184
- ENV['PROGRAMFILES'] || "\\Program Files",
185
- ENV['ProgramFiles(x86)'] || "\\Program Files (x86)"
161
+ ENV['PROGRAMFILES'] || '\\Program Files',
162
+ ENV['ProgramFiles(x86)'] || '\\Program Files (x86)',
163
+ ENV['ProgramW6432'] || '\\Program Files'
186
164
  ]
187
165
 
188
166
  paths.each do |root|
@@ -196,13 +174,10 @@ module Selenium
196
174
  end
197
175
 
198
176
  def localhost
199
- info = Socket.getaddrinfo "localhost", 80, Socket::AF_INET, Socket::SOCK_STREAM
200
-
201
- if info.empty?
202
- raise Error::WebDriverError, "unable to translate 'localhost' for TCP + IPv4"
203
- end
177
+ info = Socket.getaddrinfo 'localhost', 80, Socket::AF_INET, Socket::SOCK_STREAM
204
178
 
205
- info[0][3]
179
+ return info[0][3] unless info.empty?
180
+ raise Error::WebDriverError, "unable to translate 'localhost' for TCP + IPv4"
206
181
  end
207
182
 
208
183
  def ip
@@ -222,27 +197,25 @@ module Selenium
222
197
  end
223
198
 
224
199
  def interfaces
225
- interfaces = Socket.getaddrinfo("localhost", 8080).map { |e| e[3] }
226
- interfaces += ["0.0.0.0", Platform.ip]
200
+ interfaces = Socket.getaddrinfo('localhost', 8080).map { |e| e[3] }
201
+ interfaces += ['0.0.0.0', Platform.ip]
227
202
 
228
203
  interfaces.compact.uniq
229
204
  end
230
-
231
205
  end # Platform
232
206
  end # WebDriver
233
207
  end # Selenium
234
208
 
235
- if __FILE__ == $0
236
- p :engine => Selenium::WebDriver::Platform.engine,
237
- :os => Selenium::WebDriver::Platform.os,
238
- :ruby187? => Selenium::WebDriver::Platform.ruby187?,
239
- :ruby19? => Selenium::WebDriver::Platform.ruby19?,
240
- :jruby? => Selenium::WebDriver::Platform.jruby?,
241
- :windows? => Selenium::WebDriver::Platform.windows?,
242
- :home => Selenium::WebDriver::Platform.home,
243
- :bitsize => Selenium::WebDriver::Platform.bitsize,
244
- :localhost => Selenium::WebDriver::Platform.localhost,
245
- :ip => Selenium::WebDriver::Platform.ip,
246
- :interfaces => Selenium::WebDriver::Platform.interfaces,
247
- :null_device => Selenium::WebDriver::Platform.null_device
209
+ if $PROGRAM_NAME == __FILE__
210
+ p engine: Selenium::WebDriver::Platform.engine,
211
+ os: Selenium::WebDriver::Platform.os,
212
+ ruby_version: Selenium::WebDriver::Platform.ruby_version,
213
+ jruby?: Selenium::WebDriver::Platform.jruby?,
214
+ windows?: Selenium::WebDriver::Platform.windows?,
215
+ home: Selenium::WebDriver::Platform.home,
216
+ bitsize: Selenium::WebDriver::Platform.bitsize,
217
+ localhost: Selenium::WebDriver::Platform.localhost,
218
+ ip: Selenium::WebDriver::Platform.ip,
219
+ interfaces: Selenium::WebDriver::Platform.interfaces,
220
+ null_device: Selenium::WebDriver::Platform.null_device
248
221
  end