selenium-webdriver 3.4.3 → 3.4.4

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