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 +12 -0
- data/Gemfile.lock +54 -0
- data/lib/selenium/webdriver/chrome/service.rb +1 -5
- data/lib/selenium/webdriver/common.rb +1 -0
- data/lib/selenium/webdriver/{remote/w3c/driver.rb → common/driver_extensions/has_addons.rb} +23 -14
- data/lib/selenium/webdriver/common/logger.rb +1 -5
- data/lib/selenium/webdriver/common/service.rb +8 -0
- data/lib/selenium/webdriver/edge/service.rb +1 -5
- data/lib/selenium/webdriver/firefox.rb +1 -0
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/{remote/oss/driver.rb → firefox/marionette/bridge.rb} +24 -19
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +2 -0
- data/lib/selenium/webdriver/firefox/service.rb +4 -5
- data/lib/selenium/webdriver/ie/service.rb +1 -5
- data/lib/selenium/webdriver/phantomjs/service.rb +1 -5
- data/lib/selenium/webdriver/remote.rb +0 -2
- data/lib/selenium/webdriver/remote/driver.rb +14 -7
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +6 -0
- data/lib/selenium/webdriver/safari/service.rb +1 -5
- data/selenium-webdriver.gemspec +1 -1
- metadata +5 -4
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
|
|
data/Gemfile.lock
ADDED
@@ -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
|
-
|
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
|
23
|
-
module
|
22
|
+
module DriverExtensions
|
23
|
+
module HasAddons
|
24
24
|
|
25
25
|
#
|
26
|
-
#
|
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
|
-
|
31
|
-
|
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
|
-
|
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
|
-
|
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'
|
Binary file
|
@@ -19,26 +19,31 @@
|
|
19
19
|
|
20
20
|
module Selenium
|
21
21
|
module WebDriver
|
22
|
-
module
|
23
|
-
module
|
22
|
+
module Firefox
|
23
|
+
module Marionette
|
24
|
+
module Bridge
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
37
|
+
def initialize(opts = {})
|
32
38
|
listener = opts.delete(:listener)
|
33
|
-
bridge = Bridge.handshake(opts)
|
34
|
-
if bridge.dialect == :
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
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
|
|
data/selenium-webdriver.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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
|