selenium-webdriver 3.2.2 → 3.3.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.
- data/CHANGES +7 -0
- data/lib/selenium/webdriver/chrome/bridge.rb +22 -24
- data/lib/selenium/webdriver/chrome/service.rb +11 -0
- data/lib/selenium/webdriver/common/interactions/interaction.rb +1 -1
- data/lib/selenium/webdriver/common/service.rb +9 -2
- data/lib/selenium/webdriver/edge/bridge.rb +12 -15
- data/lib/selenium/webdriver/edge/service.rb +8 -0
- data/lib/selenium/webdriver/firefox/bridge.rb +8 -8
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/service.rb +9 -0
- data/lib/selenium/webdriver/firefox/w3c_bridge.rb +11 -15
- data/lib/selenium/webdriver/ie/bridge.rb +19 -24
- data/lib/selenium/webdriver/ie/service.rb +11 -0
- data/lib/selenium/webdriver/phantomjs/bridge.rb +13 -3
- data/lib/selenium/webdriver/remote/bridge.rb +9 -11
- data/lib/selenium/webdriver/remote/response.rb +10 -2
- data/lib/selenium/webdriver/remote/w3c_bridge.rb +11 -23
- data/lib/selenium/webdriver/remote/w3c_capabilities.rb +1 -1
- data/lib/selenium/webdriver/safari/bridge.rb +10 -9
- data/selenium-webdriver.gemspec +1 -1
- metadata +2 -2
data/CHANGES
CHANGED
@@ -26,15 +26,25 @@ module Selenium
|
|
26
26
|
opts[:desired_capabilities] = create_capabilities(opts)
|
27
27
|
|
28
28
|
unless opts.key?(:url)
|
29
|
+
driver_path = opts.delete(:driver_path) || Chrome.driver_path
|
29
30
|
port = opts.delete(:port) || Service::DEFAULT_PORT
|
30
|
-
service_args = opts.delete(:service_args) || {}
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
opts[:driver_opts] ||= {}
|
33
|
+
if opts.key? :service_log_path
|
34
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
35
|
+
[DEPRECATION] `:service_log_path` is deprecated. Use `driver_opts: {log_path: #{opts[:service_log_path]}}`
|
36
|
+
DEPRECATE
|
37
|
+
opts[:driver_opts][:log_path] = opts.delete :service_log_path
|
34
38
|
end
|
35
39
|
|
36
|
-
|
37
|
-
|
40
|
+
if opts.key? :service_args
|
41
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
42
|
+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
|
43
|
+
DEPRECATE
|
44
|
+
opts[:driver_opts][:args] = opts.delete(:service_args)
|
45
|
+
end
|
46
|
+
|
47
|
+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
|
38
48
|
@service.start
|
39
49
|
opts[:url] = @service.uri
|
40
50
|
end
|
@@ -47,10 +57,8 @@ module Selenium
|
|
47
57
|
end
|
48
58
|
|
49
59
|
def driver_extensions
|
50
|
-
[
|
51
|
-
|
52
|
-
DriverExtensions::HasWebStorage
|
53
|
-
]
|
60
|
+
[DriverExtensions::TakesScreenshot,
|
61
|
+
DriverExtensions::HasWebStorage]
|
54
62
|
end
|
55
63
|
|
56
64
|
def capabilities
|
@@ -76,34 +84,24 @@ module Selenium
|
|
76
84
|
raise ArgumentError, ':args must be an Array of Strings'
|
77
85
|
end
|
78
86
|
|
79
|
-
|
87
|
+
args.map!(&:to_s)
|
80
88
|
profile = opts.delete(:profile).as_json if opts.key?(:profile)
|
81
89
|
|
82
|
-
if profile &&
|
83
|
-
|
90
|
+
if profile && args.none? { |arg| arg =~ /user-data-dir/ }
|
91
|
+
args << "--user-data-dir=#{profile[:directory]}"
|
84
92
|
end
|
93
|
+
chrome_options['args'] = args unless args.empty?
|
85
94
|
|
86
95
|
chrome_options['extensions'] = profile[:extensions] if profile && profile[:extensions]
|
87
96
|
chrome_options['detach'] = true if opts.delete(:detach)
|
88
97
|
chrome_options['prefs'] = opts.delete(:prefs) if opts.key?(:prefs)
|
89
98
|
|
90
|
-
caps[:chrome_options] = chrome_options
|
99
|
+
caps[:chrome_options] = chrome_options unless chrome_options.empty?
|
91
100
|
caps[:proxy] = opts.delete(:proxy) if opts.key?(:proxy)
|
92
101
|
caps[:proxy] ||= opts.delete('proxy') if opts.key?('proxy')
|
93
102
|
|
94
103
|
caps
|
95
104
|
end
|
96
|
-
|
97
|
-
def extract_service_args(args)
|
98
|
-
service_args = []
|
99
|
-
service_args << "--log-path=#{args.delete(:service_log_path)}" if args.key?(:service_log_path)
|
100
|
-
service_args << "--url-base=#{args.delete(:url_base)}" if args.key?(:url_base)
|
101
|
-
service_args << "--port-server=#{args.delete(:port_server)}" if args.key?(:port_server)
|
102
|
-
service_args << "--whitelisted-ips=#{args.delete(:whitelisted_ips)}" if args.key?(:whitelisted_ips)
|
103
|
-
service_args << "--verbose=#{args.delete(:verbose)}" if args.key?(:verbose)
|
104
|
-
service_args << "--silent=#{args.delete(:silent)}" if args.key?(:silent)
|
105
|
-
service_args
|
106
|
-
end
|
107
105
|
end # Bridge
|
108
106
|
end # Chrome
|
109
107
|
end # WebDriver
|
@@ -48,6 +48,17 @@ module Selenium
|
|
48
48
|
def cannot_connect_error_text
|
49
49
|
"unable to connect to chromedriver #{@host}:#{@port}"
|
50
50
|
end
|
51
|
+
|
52
|
+
def extract_service_args(driver_opts)
|
53
|
+
driver_args = super
|
54
|
+
driver_args << "--log-path=#{driver_opts.delete(:log_path)}" if driver_opts.key?(:log_path)
|
55
|
+
driver_args << "--url-base=#{driver_opts.delete(:url_base)}" if driver_opts.key?(:url_base)
|
56
|
+
driver_args << "--port-server=#{driver_opts.delete(:port_server)}" if driver_opts.key?(:port_server)
|
57
|
+
driver_args << "--whitelisted-ips=#{driver_opts.delete(:whitelisted_ips)}" if driver_opts.key?(:whitelisted_ips)
|
58
|
+
driver_args << "--verbose" if driver_opts.key?(:verbose)
|
59
|
+
driver_args << "--silent" if driver_opts.key?(:silent)
|
60
|
+
driver_args
|
61
|
+
end
|
51
62
|
end # Service
|
52
63
|
end # Chrome
|
53
64
|
end # WebDriver
|
@@ -45,11 +45,11 @@ module Selenium
|
|
45
45
|
|
46
46
|
attr_accessor :host
|
47
47
|
|
48
|
-
def initialize(executable_path, port,
|
48
|
+
def initialize(executable_path, port, driver_opts)
|
49
49
|
@executable_path = binary_path(executable_path)
|
50
50
|
@host = Platform.localhost
|
51
51
|
@port = Integer(port)
|
52
|
-
@extra_args =
|
52
|
+
@extra_args = extract_service_args(driver_opts)
|
53
53
|
|
54
54
|
raise Error::WebDriverError, "invalid port: #{@port}" if @port < 1
|
55
55
|
end
|
@@ -137,6 +137,13 @@ module Selenium
|
|
137
137
|
def socket_lock
|
138
138
|
@socket_lock ||= SocketLock.new(@port - 1, SOCKET_LOCK_TIMEOUT)
|
139
139
|
end
|
140
|
+
|
141
|
+
protected
|
142
|
+
|
143
|
+
def extract_service_args(driver_opts)
|
144
|
+
driver_opts.key?(:args) ? driver_opts.delete(:args) : []
|
145
|
+
end
|
146
|
+
|
140
147
|
end # Service
|
141
148
|
end # WebDriver
|
142
149
|
end # Selenium
|
@@ -26,19 +26,26 @@ module Selenium
|
|
26
26
|
|
27
27
|
class Bridge < Remote::W3CBridge
|
28
28
|
def initialize(opts = {})
|
29
|
-
|
30
|
-
service_args = opts.delete(:service_args) || {}
|
29
|
+
opts[:desired_capabilities] ||= Remote::W3CCapabilities.edge
|
31
30
|
|
32
31
|
unless opts.key?(:url)
|
33
32
|
driver_path = opts.delete(:driver_path) || Edge.driver_path
|
34
|
-
|
33
|
+
port = opts.delete(:port) || Service::DEFAULT_PORT
|
34
|
+
|
35
|
+
opts[:driver_opts] ||= {}
|
36
|
+
if opts.key? :service_args
|
37
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
38
|
+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
|
39
|
+
DEPRECATE
|
40
|
+
opts[:driver_opts][:args] = opts.delete(:service_args)
|
41
|
+
end
|
42
|
+
|
43
|
+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
|
35
44
|
@service.host = 'localhost' if @service.host == '127.0.0.1'
|
36
45
|
@service.start
|
37
46
|
opts[:url] = @service.uri
|
38
47
|
end
|
39
48
|
|
40
|
-
opts[:desired_capabilities] ||= Remote::W3CCapabilities.edge
|
41
|
-
|
42
49
|
super(opts)
|
43
50
|
end
|
44
51
|
|
@@ -108,16 +115,6 @@ module Selenium
|
|
108
115
|
def maximize_window(handle = :current)
|
109
116
|
execute :maximize_window, window_handle: handle
|
110
117
|
end
|
111
|
-
|
112
|
-
private
|
113
|
-
|
114
|
-
def extract_service_args(args = {})
|
115
|
-
service_args = []
|
116
|
-
service_args << "–host=#{args[:host]}" if args.key? :host
|
117
|
-
service_args << "–package=#{args[:package]}" if args.key? :package
|
118
|
-
service_args << "-verbose" if args[:verbose] == true
|
119
|
-
service_args
|
120
|
-
end
|
121
118
|
end # Bridge
|
122
119
|
end # Edge
|
123
120
|
end # WebDriver
|
@@ -47,6 +47,14 @@ module Selenium
|
|
47
47
|
def cannot_connect_error_text
|
48
48
|
"unable to connect to MicrosoftWebDriver #{@host}:#{@port}"
|
49
49
|
end
|
50
|
+
|
51
|
+
def extract_service_args(driver_opts)
|
52
|
+
driver_args = super
|
53
|
+
driver_args << "–host=#{driver_opts[:host]}" if driver_opts.key? :host
|
54
|
+
driver_args << "–package=#{driver_opts[:package]}" if driver_opts.key? :package
|
55
|
+
driver_args << "-verbose" if driver_opts[:verbose] == true
|
56
|
+
driver_args
|
57
|
+
end
|
50
58
|
end # Service
|
51
59
|
end # Edge
|
52
60
|
end # WebDriver
|
@@ -24,14 +24,20 @@ module Selenium
|
|
24
24
|
class Bridge < Remote::Bridge
|
25
25
|
def initialize(opts = {})
|
26
26
|
opts[:desired_capabilities] ||= Remote::Capabilities.firefox
|
27
|
-
|
27
|
+
|
28
|
+
if opts.key? :proxy
|
29
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
30
|
+
[DEPRECATION] `:proxy` is deprecated. Pass in as capability: `Remote::Capabilities.firefox(proxy: #{opts[:proxy]})`
|
31
|
+
DEPRECATE
|
32
|
+
opts[:desired_capabilities].proxy = opts.delete(:proxy)
|
33
|
+
end
|
28
34
|
|
29
35
|
unless opts.key?(:url)
|
30
36
|
port = opts.delete(:port) || DEFAULT_PORT
|
31
37
|
profile = opts.delete(:profile)
|
32
38
|
|
33
39
|
Binary.path = opts[:desired_capabilities][:firefox_binary] if opts[:desired_capabilities][:firefox_binary]
|
34
|
-
@launcher =
|
40
|
+
@launcher = Launcher.new Binary.new, port, profile
|
35
41
|
@launcher.launch
|
36
42
|
opts[:url] = @launcher.url
|
37
43
|
end
|
@@ -58,12 +64,6 @@ module Selenium
|
|
58
64
|
ensure
|
59
65
|
@launcher.quit
|
60
66
|
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def create_launcher(port, profile)
|
65
|
-
Launcher.new Binary.new, port, profile
|
66
|
-
end
|
67
67
|
end # Bridge
|
68
68
|
end # Firefox
|
69
69
|
end # WebDriver
|
Binary file
|
@@ -51,6 +51,15 @@ module Selenium
|
|
51
51
|
def cannot_connect_error_text
|
52
52
|
"unable to connect to Mozilla geckodriver #{@host}:#{@port}"
|
53
53
|
end
|
54
|
+
|
55
|
+
def extract_service_args(driver_opts)
|
56
|
+
driver_args = super
|
57
|
+
driver_args << "--binary=#{driver_opts[:binary]}" if driver_opts.key?(:binary)
|
58
|
+
driver_args << "–-log=#{driver_opts[:log]}" if driver_opts.key?(:log)
|
59
|
+
driver_args << "–-marionette-port=#{driver_opts[:marionette_port]}" if driver_opts.key?(:marionette_port)
|
60
|
+
driver_args << "–-host=#{driver_opts[:host]}" if driver_opts.key?(:host)
|
61
|
+
driver_args
|
62
|
+
end
|
54
63
|
end # Service
|
55
64
|
end # Firefox
|
56
65
|
end # WebDriver
|
@@ -26,11 +26,18 @@ module Selenium
|
|
26
26
|
opts[:desired_capabilities] = create_capabilities(opts)
|
27
27
|
|
28
28
|
unless opts.key?(:url)
|
29
|
+
driver_path = opts.delete(:driver_path) || Firefox.driver_path
|
29
30
|
port = opts.delete(:port) || Service::DEFAULT_PORT
|
30
|
-
service_args = opts.delete(:service_args) || {}
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
opts[:driver_opts] ||= {}
|
33
|
+
if opts.key? :service_args
|
34
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
35
|
+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
|
36
|
+
DEPRECATE
|
37
|
+
opts[:driver_opts][:args] = opts.delete(:service_args)
|
38
|
+
end
|
39
|
+
|
40
|
+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
|
34
41
|
@service.start
|
35
42
|
opts[:url] = @service.uri
|
36
43
|
end
|
@@ -44,7 +51,7 @@ module Selenium
|
|
44
51
|
|
45
52
|
def driver_extensions
|
46
53
|
[DriverExtensions::TakesScreenshot,
|
47
|
-
|
54
|
+
DriverExtensions::HasWebStorage]
|
48
55
|
end
|
49
56
|
|
50
57
|
def quit
|
@@ -71,17 +78,6 @@ module Selenium
|
|
71
78
|
Binary.path = caps[:firefox_options][:binary] if caps[:firefox_options].key?(:binary)
|
72
79
|
caps
|
73
80
|
end
|
74
|
-
|
75
|
-
def extract_service_args(args = {})
|
76
|
-
service_args = []
|
77
|
-
service_args << "--binary=#{args[:binary]}" if args.key?(:binary)
|
78
|
-
service_args << "–-log=#{args[:log]}" if args.key?(:log)
|
79
|
-
service_args << "–-marionette-port=#{args[:marionette_port]}" if args.key?(:marionette_port)
|
80
|
-
service_args << "–-host=#{args[:host]}" if args.key?(:host)
|
81
|
-
service_args << "–-port=#{args[:port]}" if args.key?(:port)
|
82
|
-
service_args
|
83
|
-
end
|
84
|
-
|
85
81
|
end # W3CBridge
|
86
82
|
end # Firefox
|
87
83
|
end # WebDriver
|
@@ -29,11 +29,26 @@ module Selenium
|
|
29
29
|
opts[:desired_capabilities] ||= Remote::Capabilities.internet_explorer
|
30
30
|
|
31
31
|
unless opts.key?(:url)
|
32
|
-
port = opts.delete(:port) || Service::DEFAULT_PORT
|
33
|
-
service_args = opts.delete(:service_args) || {}
|
34
|
-
service_args = match_legacy(opts, service_args)
|
35
32
|
driver_path = opts.delete(:driver_path) || IE.driver_path
|
36
|
-
|
33
|
+
port = opts.delete(:port) || Service::DEFAULT_PORT
|
34
|
+
|
35
|
+
opts[:driver_opts] ||= {}
|
36
|
+
if opts.key? :service_args
|
37
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
38
|
+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
|
39
|
+
DEPRECATE
|
40
|
+
opts[:driver_opts][:args] = opts.delete(:service_args)
|
41
|
+
end
|
42
|
+
|
43
|
+
%i[log_level log_file implementation].each do |method|
|
44
|
+
next unless opts.key? method
|
45
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
46
|
+
[DEPRECATION] `#{method}` is deprecated. Pass switches using `driver_opts`
|
47
|
+
DEPRECATE
|
48
|
+
opts[:driver_opts][method] = opts.delete(method)
|
49
|
+
end
|
50
|
+
|
51
|
+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
|
37
52
|
@service.start
|
38
53
|
opts[:url] = @service.uri
|
39
54
|
end
|
@@ -59,26 +74,6 @@ module Selenium
|
|
59
74
|
ensure
|
60
75
|
@service.stop if @service
|
61
76
|
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
def match_legacy(opts, args)
|
66
|
-
args[:log_level] = opts.delete(:log_level) if opts.key?(:log_level)
|
67
|
-
args[:log_file] = opts.delete(:log_file) if opts.key?(:log_file)
|
68
|
-
args[:implementation] = opts.delete(:implementation) if opts.key?(:implementation)
|
69
|
-
args
|
70
|
-
end
|
71
|
-
|
72
|
-
def extract_service_args(args)
|
73
|
-
service_args = []
|
74
|
-
service_args << "--log-level=#{args.delete(:log_level).to_s.upcase}" if args.key?(:log_level)
|
75
|
-
service_args << "--log-file=#{args.delete(:log_file)}" if args.key?(:log_file)
|
76
|
-
service_args << "--implementation=#{args.delete(:implementation).to_s.upcase}" if args.key?(:implementation)
|
77
|
-
service_args << "--host=#{args.delete(:host)}" if args.key?(:host)
|
78
|
-
service_args << "--extract_path=#{args.delete(:extract_path)}" if args.key?(:extract_path)
|
79
|
-
service_args << "--silent" if args[:silent] == true
|
80
|
-
service_args
|
81
|
-
end
|
82
77
|
end # Bridge
|
83
78
|
end # IE
|
84
79
|
end # WebDriver
|
@@ -47,6 +47,17 @@ module Selenium
|
|
47
47
|
def cannot_connect_error_text
|
48
48
|
"unable to connect to IE server #{@host}:#{@port}"
|
49
49
|
end
|
50
|
+
|
51
|
+
def extract_service_args(driver_opts)
|
52
|
+
driver_args = super
|
53
|
+
driver_args << "--log-level=#{driver_opts.delete(:log_level).to_s.upcase}" if driver_opts.key?(:log_level)
|
54
|
+
driver_args << "--log-file=#{driver_opts.delete(:log_file)}" if driver_opts.key?(:log_file)
|
55
|
+
driver_args << "--implementation=#{driver_opts.delete(:implementation).to_s.upcase}" if driver_opts.key?(:implementation)
|
56
|
+
driver_args << "--host=#{driver_opts.delete(:host)}" if driver_opts.key?(:host)
|
57
|
+
driver_args << "--extract_path=#{driver_opts.delete(:extract_path)}" if driver_opts.key?(:extract_path)
|
58
|
+
driver_args << "--silent" if driver_opts[:silent] == true
|
59
|
+
driver_args
|
60
|
+
end
|
50
61
|
end # Server
|
51
62
|
end # IE
|
52
63
|
end # WebDriver
|
@@ -29,10 +29,20 @@ module Selenium
|
|
29
29
|
opts[:desired_capabilities] ||= Remote::Capabilities.phantomjs
|
30
30
|
|
31
31
|
unless opts.key?(:url)
|
32
|
-
port = opts.delete(:port) || Service::DEFAULT_PORT
|
33
32
|
driver_path = opts.delete(:driver_path) || PhantomJS.driver_path
|
34
|
-
|
35
|
-
|
33
|
+
port = opts.delete(:port) || Service::DEFAULT_PORT
|
34
|
+
|
35
|
+
opts[:driver_opts] ||= {}
|
36
|
+
if opts.key? :args
|
37
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
38
|
+
[DEPRECATION] `:args` is deprecated. Pass switches using `driver_opts`
|
39
|
+
DEPRECATE
|
40
|
+
opts[:driver_opts][:args] = opts.delete(:args)
|
41
|
+
elsif opts[:desired_capabilities]['phantomjs.cli.args']
|
42
|
+
opts[:driver_opts][:args] = opts[:desired_capabilities]['phantomjs.cli.args']
|
43
|
+
end
|
44
|
+
|
45
|
+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
|
36
46
|
@service.start
|
37
47
|
opts[:url] = @service.uri
|
38
48
|
end
|
@@ -81,17 +81,15 @@ module Selenium
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def driver_extensions
|
84
|
-
[
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
DriverExtensions::HasWebStorage
|
94
|
-
]
|
84
|
+
[DriverExtensions::UploadsFiles,
|
85
|
+
DriverExtensions::TakesScreenshot,
|
86
|
+
DriverExtensions::HasSessionId,
|
87
|
+
DriverExtensions::Rotatable,
|
88
|
+
DriverExtensions::HasTouchScreen,
|
89
|
+
DriverExtensions::HasLocation,
|
90
|
+
DriverExtensions::HasNetworkConnection,
|
91
|
+
DriverExtensions::HasRemoteStatus,
|
92
|
+
DriverExtensions::HasWebStorage]
|
95
93
|
end
|
96
94
|
|
97
95
|
def commands(command)
|
@@ -95,12 +95,20 @@ module Selenium
|
|
95
95
|
ex.set_backtrace(backtrace + ex.backtrace)
|
96
96
|
end
|
97
97
|
|
98
|
+
def error_payload
|
99
|
+
# Even errors are wrapped in 'value' for w3c
|
100
|
+
# Grab 'value' key for error, leave original payload alone and let the bridge process
|
101
|
+
@error_payload ||= !@payload.key?('sessionId') ? @payload['value'] : @payload
|
102
|
+
end
|
103
|
+
|
98
104
|
def status
|
99
|
-
|
105
|
+
return unless error_payload.is_a? Hash
|
106
|
+
@status ||= error_payload['status'] || error_payload['error']
|
100
107
|
end
|
101
108
|
|
102
109
|
def value
|
103
|
-
|
110
|
+
return unless error_payload.is_a? Hash
|
111
|
+
@value ||= error_payload['value'] || error_payload['message']
|
104
112
|
end
|
105
113
|
end # Response
|
106
114
|
end # Remote
|
@@ -85,14 +85,12 @@ module Selenium
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def driver_extensions
|
88
|
-
[
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
DriverExtensions::HasWebStorage
|
95
|
-
]
|
88
|
+
[DriverExtensions::UploadsFiles,
|
89
|
+
DriverExtensions::TakesScreenshot,
|
90
|
+
DriverExtensions::HasSessionId,
|
91
|
+
DriverExtensions::Rotatable,
|
92
|
+
DriverExtensions::HasRemoteStatus,
|
93
|
+
DriverExtensions::HasWebStorage]
|
96
94
|
end
|
97
95
|
|
98
96
|
def commands(command)
|
@@ -113,7 +111,7 @@ module Selenium
|
|
113
111
|
end
|
114
112
|
|
115
113
|
def create_session(desired_capabilities)
|
116
|
-
resp =
|
114
|
+
resp = execute :new_session, {}, {desiredCapabilities: desired_capabilities}
|
117
115
|
@session_id = resp['sessionId']
|
118
116
|
return W3CCapabilities.json_create resp['value'] if @session_id
|
119
117
|
|
@@ -137,7 +135,8 @@ module Selenium
|
|
137
135
|
end
|
138
136
|
|
139
137
|
def timeout(type, milliseconds)
|
140
|
-
|
138
|
+
type = 'pageLoad' if type == 'page load'
|
139
|
+
execute :set_timeout, {}, {type => milliseconds}
|
141
140
|
end
|
142
141
|
|
143
142
|
#
|
@@ -600,21 +599,10 @@ module Selenium
|
|
600
599
|
# executes a command on the remote server.
|
601
600
|
#
|
602
601
|
#
|
603
|
-
# Returns the 'value' of the returned payload
|
604
|
-
#
|
605
|
-
|
606
|
-
def execute(*args)
|
607
|
-
result = raw_execute(*args)
|
608
|
-
result.payload.key?('value') ? result['value'] : result
|
609
|
-
end
|
610
|
-
|
611
|
-
#
|
612
|
-
# executes a command on the remote server.
|
613
|
-
#
|
614
602
|
# @return [WebDriver::Remote::Response]
|
615
603
|
#
|
616
604
|
|
617
|
-
def
|
605
|
+
def execute(command, opts = {}, command_hash = nil)
|
618
606
|
verb, path = commands(command) || raise(ArgumentError, "unknown command: #{command.inspect}")
|
619
607
|
path = path.dup
|
620
608
|
|
@@ -629,7 +617,7 @@ module Selenium
|
|
629
617
|
end
|
630
618
|
|
631
619
|
WebDriver.logger.info("-> #{verb.to_s.upcase} #{path}")
|
632
|
-
http.call
|
620
|
+
http.call(verb, path, command_hash)['value']
|
633
621
|
end
|
634
622
|
|
635
623
|
def escaper
|
@@ -109,7 +109,7 @@ module Selenium
|
|
109
109
|
caps.page_load_strategy = data.delete('pageLoadStrategy')
|
110
110
|
timeouts = data.delete('timeouts')
|
111
111
|
caps.implicit_timeout = timeouts['implicit'] if timeouts
|
112
|
-
caps.page_load_timeout = timeouts['
|
112
|
+
caps.page_load_timeout = timeouts['pageLoad'] if timeouts
|
113
113
|
caps.script_timeout = timeouts['script'] if timeouts
|
114
114
|
|
115
115
|
proxy = data.delete('proxy')
|
@@ -26,11 +26,18 @@ module Selenium
|
|
26
26
|
opts[:desired_capabilities] ||= Remote::Capabilities.safari
|
27
27
|
|
28
28
|
unless opts.key?(:url)
|
29
|
+
driver_path = opts.delete(:driver_path) || Safari.driver_path
|
29
30
|
port = opts.delete(:port) || Service::DEFAULT_PORT
|
30
|
-
service_args = opts.delete(:service_args) || {}
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
opts[:driver_opts] ||= {}
|
33
|
+
if opts.key? :service_args
|
34
|
+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
|
35
|
+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
|
36
|
+
DEPRECATE
|
37
|
+
opts[:driver_opts][:args] = opts.delete(:service_args)
|
38
|
+
end
|
39
|
+
|
40
|
+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
|
34
41
|
@service.start
|
35
42
|
opts[:url] = @service.uri
|
36
43
|
end
|
@@ -43,12 +50,6 @@ module Selenium
|
|
43
50
|
ensure
|
44
51
|
@service.stop if @service
|
45
52
|
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def extract_service_args(args = {})
|
50
|
-
args.key?(:port) ? ["--port=#{args[:port]}"] : []
|
51
|
-
end
|
52
53
|
end # Bridge
|
53
54
|
end # Safari
|
54
55
|
end # WebDriver
|
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.
|
8
|
+
s.version = '3.3.0'
|
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.
|
5
|
+
version: 3.3.0
|
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-03-
|
14
|
+
date: 2017-03-07 00:00:00 -06:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|