selenium-webdriver 2.53.4 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
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