selenium-webdriver 3.4.3 → 3.4.4

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.
data/CHANGES CHANGED
@@ -1,3 +1,15 @@
1
+ 3.4.4 (2017-07-13)
2
+ ==================
3
+
4
+ Firefox:
5
+ * Added support for GeckoDriver install addon command (issue 4215).
6
+ * Added support for GeckoDriver uninstall addon command (issue 4215).
7
+ * Raise error when passing :firefox_options as capability.
8
+
9
+ Ruby:
10
+ * Fixed a bug when childprocess were leaking /dev/null file descriptor (issue 4285).
11
+ * Make Remote::Driver class so that it can be inherited from.
12
+
1
13
  3.4.3 (2017-06-16)
2
14
  ==================
3
15
 
@@ -0,0 +1,54 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ selenium-webdriver (3.4.3)
5
+ childprocess (~> 0.5)
6
+ rubyzip (~> 1.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.5.1)
12
+ public_suffix (~> 2.0, >= 2.0.2)
13
+ childprocess (0.7.0)
14
+ ffi (~> 1.0, >= 1.0.11)
15
+ crack (0.4.3)
16
+ safe_yaml (~> 1.0.0)
17
+ diff-lcs (1.3)
18
+ ffi (1.9.18)
19
+ hashdiff (0.3.4)
20
+ public_suffix (2.0.5)
21
+ rack (1.6.8)
22
+ rspec (3.6.0)
23
+ rspec-core (~> 3.6.0)
24
+ rspec-expectations (~> 3.6.0)
25
+ rspec-mocks (~> 3.6.0)
26
+ rspec-core (3.6.0)
27
+ rspec-support (~> 3.6.0)
28
+ rspec-expectations (3.6.0)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.6.0)
31
+ rspec-mocks (3.6.0)
32
+ diff-lcs (>= 1.2.0, < 2.0)
33
+ rspec-support (~> 3.6.0)
34
+ rspec-support (3.6.0)
35
+ rubyzip (1.2.1)
36
+ safe_yaml (1.0.4)
37
+ webmock (2.3.2)
38
+ addressable (>= 2.3.6)
39
+ crack (>= 0.3.2)
40
+ hashdiff
41
+ yard (0.8.7.6)
42
+
43
+ PLATFORMS
44
+ ruby
45
+
46
+ DEPENDENCIES
47
+ rack (~> 1.0)
48
+ rspec (~> 3.0)
49
+ selenium-webdriver!
50
+ webmock (~> 2.0)
51
+ yard (~> 0.8.7)
52
+
53
+ BUNDLED WITH
54
+ 1.15.1
@@ -36,11 +36,7 @@ module Selenium
36
36
  private
37
37
 
38
38
  def start_process
39
- server_command = [@executable_path, "--port=#{@port}", *@extra_args]
40
- @process = ChildProcess.build(*server_command)
41
- WebDriver.logger.debug("Executing Process #{server_command}")
42
-
43
- @process.io.stdout = @process.io.stderr = WebDriver.logger.io
39
+ @process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
44
40
  @process.leader = true unless Platform.windows?
45
41
  @process.start
46
42
  end
@@ -59,6 +59,7 @@ require 'selenium/webdriver/common/driver_extensions/has_touch_screen'
59
59
  require 'selenium/webdriver/common/driver_extensions/has_remote_status'
60
60
  require 'selenium/webdriver/common/driver_extensions/has_network_connection'
61
61
  require 'selenium/webdriver/common/driver_extensions/uploads_files'
62
+ require 'selenium/webdriver/common/driver_extensions/has_addons'
62
63
  require 'selenium/webdriver/common/interactions/interactions'
63
64
  require 'selenium/webdriver/common/interactions/input_device'
64
65
  require 'selenium/webdriver/common/interactions/interaction'
@@ -19,23 +19,32 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- module Remote
23
- module W3C
22
+ module DriverExtensions
23
+ module HasAddons
24
24
 
25
25
  #
26
- # Driver implementation for remote server talking W3C dialect.
27
- # @api private
26
+ # Installs addon.
28
27
  #
28
+ # @param [String] path Full path to addon file
29
+ # @param [Boolean] temporary
30
+ # @return [String] identifier of installed addon
31
+ #
32
+
33
+ def install_addon(path, temporary = nil)
34
+ @bridge.install_addon(path, temporary)
35
+ end
36
+
37
+ #
38
+ # Uninstalls addon.
39
+ #
40
+ # @param [String] id Identifier of installed addon
41
+ #
42
+
43
+ def uninstall_addon(id)
44
+ @bridge.uninstall_addon(id)
45
+ end
29
46
 
30
- class Driver < WebDriver::Driver
31
- include DriverExtensions::UploadsFiles
32
- include DriverExtensions::TakesScreenshot
33
- include DriverExtensions::HasSessionId
34
- include DriverExtensions::Rotatable
35
- include DriverExtensions::HasRemoteStatus
36
- include DriverExtensions::HasWebStorage
37
- end # Driver
38
- end # W3C
39
- end # Remote
47
+ end # HasAddons
48
+ end # DriverExtensions
40
49
  end # WebDriver
41
50
  end # Selenium
@@ -97,11 +97,7 @@ module Selenium
97
97
  # @api private
98
98
  #
99
99
  def io
100
- if debug?
101
- @logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
102
- else
103
- File.new(Platform.null_device, 'w')
104
- end
100
+ @logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
105
101
  end
106
102
 
107
103
  #
@@ -89,6 +89,14 @@ module Selenium
89
89
 
90
90
  private
91
91
 
92
+ def build_process(*command)
93
+ WebDriver.logger.debug("Executing Process #{command}")
94
+ @process = ChildProcess.build(*command)
95
+ @process.io.stdout = @process.io.stderr = WebDriver.logger.io if WebDriver.logger.debug?
96
+
97
+ @process
98
+ end
99
+
92
100
  def connect_to_server
93
101
  Net::HTTP.start(@host, @port) do |http|
94
102
  http.open_timeout = STOP_TIMEOUT / 2
@@ -36,11 +36,7 @@ module Selenium
36
36
  private
37
37
 
38
38
  def start_process
39
- server_command = [@executable_path, "--port=#{@port}", *@extra_args]
40
- @process = ChildProcess.build(*server_command)
41
- WebDriver.logger.debug("Executing Process #{server_command}")
42
-
43
- @process.io.stdout = @process.io.stderr = WebDriver.logger.io
39
+ @process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
44
40
  @process.start
45
41
  end
46
42
 
@@ -31,6 +31,7 @@ require 'selenium/webdriver/firefox/profile'
31
31
  require 'selenium/webdriver/firefox/launcher'
32
32
  require 'selenium/webdriver/firefox/legacy/driver'
33
33
 
34
+ require 'selenium/webdriver/firefox/marionette/bridge'
34
35
  require 'selenium/webdriver/firefox/marionette/driver'
35
36
  require 'selenium/webdriver/firefox/options'
36
37
  require 'selenium/webdriver/firefox/service'
@@ -19,26 +19,31 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- module Remote
23
- module OSS
22
+ module Firefox
23
+ module Marionette
24
+ module Bridge
24
25
 
25
- #
26
- # Driver implementation for remote server talking OSS dialect.
27
- # @api private
28
- #
26
+ COMMANDS = {
27
+ install_addon: [:post, 'session/:session_id/moz/addon/install'.freeze],
28
+ uninstall_addon: [:post, 'session/:session_id/moz/addon/uninstall'.freeze]
29
+ }.freeze
29
30
 
30
- class Driver < WebDriver::Driver
31
- include DriverExtensions::UploadsFiles
32
- include DriverExtensions::TakesScreenshot
33
- include DriverExtensions::HasSessionId
34
- include DriverExtensions::Rotatable
35
- include DriverExtensions::HasTouchScreen
36
- include DriverExtensions::HasLocation
37
- include DriverExtensions::HasNetworkConnection
38
- include DriverExtensions::HasRemoteStatus
39
- include DriverExtensions::HasWebStorage
40
- end # Driver
41
- end # OSS
42
- end # Remote
31
+ def commands(command)
32
+ COMMANDS[command] || super
33
+ end
34
+
35
+ def install_addon(path, temporary)
36
+ payload = {path: path}
37
+ payload.merge!(temporary: temporary) unless temporary.nil?
38
+ execute :install_addon, {}, payload
39
+ end
40
+
41
+ def uninstall_addon(id)
42
+ execute :uninstall_addon, {}, {id: id}
43
+ end
44
+
45
+ end # Bridge
46
+ end # Marionette
47
+ end # Firefox
43
48
  end # WebDriver
44
49
  end # Selenium
@@ -28,6 +28,7 @@ module Selenium
28
28
  #
29
29
 
30
30
  class Driver < WebDriver::Driver
31
+ include DriverExtensions::HasAddons
31
32
  include DriverExtensions::HasWebStorage
32
33
  include DriverExtensions::TakesScreenshot
33
34
 
@@ -55,6 +56,7 @@ module Selenium
55
56
  bridge = Remote::Bridge.new(opts)
56
57
  capabilities = bridge.create_session(desired_capabilities)
57
58
  @bridge = Remote::W3C::Bridge.new(capabilities, bridge.session_id, opts)
59
+ @bridge.extend Marionette::Bridge
58
60
 
59
61
  super(@bridge, listener: listener)
60
62
  end
@@ -40,11 +40,10 @@ module Selenium
40
40
  private
41
41
 
42
42
  def start_process
43
- server_command = [@executable_path, "--binary=#{Firefox::Binary.path}", "--port=#{@port}", *@extra_args]
44
- @process = ChildProcess.build(*server_command)
45
- WebDriver.logger.debug("Executing Process #{server_command}")
46
-
47
- @process.io.stdout = @process.io.stderr = WebDriver.logger.io
43
+ @process = build_process(@executable_path,
44
+ "--binary=#{Firefox::Binary.path}",
45
+ "--port=#{@port}",
46
+ *@extra_args)
48
47
  @process.start
49
48
  end
50
49
 
@@ -36,11 +36,7 @@ module Selenium
36
36
  private
37
37
 
38
38
  def start_process
39
- server_command = [@executable_path, "--port=#{@port}", *@extra_args]
40
- @process = ChildProcess.new(*server_command)
41
- WebDriver.logger.debug("Executing Process #{server_command}")
42
-
43
- @process.io.stdout = @process.io.stderr = WebDriver.logger.io
39
+ @process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
44
40
  @process.start
45
41
  end
46
42
 
@@ -32,11 +32,7 @@ module Selenium
32
32
  private
33
33
 
34
34
  def start_process
35
- server_command = [@executable_path, "--webdriver=#{@port}", *@extra_args]
36
- @process = ChildProcess.build(*server_command.compact)
37
- WebDriver.logger.debug("Executing Process #{server_command}")
38
-
39
- @process.io.stdout = @process.io.stderr = WebDriver.logger.io
35
+ @process = build_process(@executable_path, "--webdriver=#{@port}", *@extra_args)
40
36
  @process.start
41
37
  end
42
38
 
@@ -29,9 +29,7 @@ require 'selenium/webdriver/remote/http/default'
29
29
  require 'selenium/webdriver/remote/capabilities'
30
30
  require 'selenium/webdriver/remote/oss/bridge'
31
31
  require 'selenium/webdriver/remote/oss/commands'
32
- require 'selenium/webdriver/remote/oss/driver'
33
32
 
34
33
  require 'selenium/webdriver/remote/w3c/bridge'
35
34
  require 'selenium/webdriver/remote/w3c/capabilities'
36
35
  require 'selenium/webdriver/remote/w3c/commands'
37
- require 'selenium/webdriver/remote/w3c/driver'
@@ -26,16 +26,23 @@ module Selenium
26
26
  # @api private
27
27
  #
28
28
 
29
- module Driver
29
+ class Driver < WebDriver::Driver
30
+ include DriverExtensions::UploadsFiles
31
+ include DriverExtensions::TakesScreenshot
32
+ include DriverExtensions::HasSessionId
33
+ include DriverExtensions::Rotatable
34
+ include DriverExtensions::HasRemoteStatus
35
+ include DriverExtensions::HasWebStorage
30
36
 
31
- def self.new(**opts)
37
+ def initialize(opts = {})
32
38
  listener = opts.delete(:listener)
33
- bridge = Bridge.handshake(opts)
34
- if bridge.dialect == :w3c
35
- W3C::Driver.new(bridge, listener: listener)
36
- else
37
- OSS::Driver.new(bridge, listener: listener)
39
+ @bridge = Bridge.handshake(opts)
40
+ if @bridge.dialect == :oss
41
+ extend DriverExtensions::HasTouchScreen
42
+ extend DriverExtensions::HasLocation
43
+ extend DriverExtensions::HasNetworkConnection
38
44
  end
45
+ super(@bridge, listener: listener)
39
46
  end
40
47
 
41
48
  end # Driver
@@ -155,6 +155,12 @@ module Selenium
155
155
  next if value.is_a?(String) && value.empty?
156
156
 
157
157
  capability_name = name.to_s
158
+
159
+ if capability_name == 'firefox_options'
160
+ msg = ':firefox_options is no longer a valid parameter for Remote::Capabilities, use Firefox::Options instead'
161
+ raise Error::WebDriverError msg
162
+ end
163
+
158
164
  snake_cased_capability_names = KNOWN.map(&:to_s)
159
165
  camel_cased_capability_names = snake_cased_capability_names.map(&w3c_capabilities.method(:camel_case))
160
166
 
@@ -46,11 +46,7 @@ module Selenium
46
46
  end
47
47
 
48
48
  def start_process
49
- server_command = [@executable_path, "--port=#{@port}", *@extra_args]
50
- @process = ChildProcess.build(*server_command)
51
- WebDriver.logger.debug("Executing Process #{server_command}")
52
-
53
- @process.io.stdout = @process.io.stderr = WebDriver.logger.io
49
+ @process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
54
50
  @process.start
55
51
  end
56
52
 
@@ -5,7 +5,7 @@ raise "cwd must be #{root} when reading gemspec" if root != Dir.pwd
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'selenium-webdriver'
8
- s.version = '3.4.3'
8
+ s.version = '3.4.4'
9
9
 
10
10
  s.authors = ['Alex Rodionov', 'Titus Fortner']
11
11
  s.email = ['p0deje@gmail.com', 'titusfortner@gmail.com']
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 3.4.3
5
+ version: 3.4.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alex Rodionov
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2017-06-16 00:00:00 +07:00
14
+ date: 2017-07-13 00:00:00 +07:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -96,6 +96,7 @@ extra_rdoc_files: []
96
96
  files:
97
97
  - CHANGES
98
98
  - Gemfile
99
+ - Gemfile.lock
99
100
  - LICENSE
100
101
  - README.md
101
102
  - selenium-webdriver.gemspec
@@ -150,6 +151,7 @@ files:
150
151
  - lib/selenium/webdriver/common/wait.rb
151
152
  - lib/selenium/webdriver/common/window.rb
152
153
  - lib/selenium/webdriver/common/zipper.rb
154
+ - lib/selenium/webdriver/common/driver_extensions/has_addons.rb
153
155
  - lib/selenium/webdriver/common/driver_extensions/has_location.rb
154
156
  - lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb
155
157
  - lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb
@@ -185,6 +187,7 @@ files:
185
187
  - lib/selenium/webdriver/firefox/extension/prefs.json
186
188
  - lib/selenium/webdriver/firefox/extension/webdriver.xpi
187
189
  - lib/selenium/webdriver/firefox/legacy/driver.rb
190
+ - lib/selenium/webdriver/firefox/marionette/bridge.rb
188
191
  - lib/selenium/webdriver/firefox/marionette/driver.rb
189
192
  - lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so
190
193
  - lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so
@@ -203,11 +206,9 @@ files:
203
206
  - lib/selenium/webdriver/remote/http/persistent.rb
204
207
  - lib/selenium/webdriver/remote/oss/bridge.rb
205
208
  - lib/selenium/webdriver/remote/oss/commands.rb
206
- - lib/selenium/webdriver/remote/oss/driver.rb
207
209
  - lib/selenium/webdriver/remote/w3c/bridge.rb
208
210
  - lib/selenium/webdriver/remote/w3c/capabilities.rb
209
211
  - lib/selenium/webdriver/remote/w3c/commands.rb
210
- - lib/selenium/webdriver/remote/w3c/driver.rb
211
212
  - lib/selenium/webdriver/safari/driver.rb
212
213
  - lib/selenium/webdriver/safari/service.rb
213
214
  - lib/selenium/webdriver/support/abstract_event_listener.rb