Skip to content

Commit d9bd8e3

Browse files
committed
[rb] remove support for capabilities in local drivers
1 parent e02dd2e commit d9bd8e3

File tree

13 files changed

+30
-515
lines changed

13 files changed

+30
-515
lines changed

rb/lib/selenium/webdriver/chrome/driver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ module Chrome
3030
class Driver < Chromium::Driver
3131
include LocalDriver
3232

33-
def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
34-
caps, url = initialize_local_driver(capabilities, options, service, url)
33+
def initialize(options: nil, service: nil, url: nil, **opts)
34+
caps, url = initialize_local_driver(options, service, url)
3535
super(caps: caps, url: url, **opts)
3636
end
3737

rb/lib/selenium/webdriver/common/driver.rb

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -318,18 +318,6 @@ def create_bridge(caps:, url:, http_client: nil)
318318
end
319319
end
320320

321-
def generate_capabilities(capabilities)
322-
Array(capabilities).map { |cap|
323-
if cap.is_a? Symbol
324-
cap = WebDriver::Options.send(cap)
325-
elsif !cap.respond_to? :as_json
326-
msg = ":capabilities parameter only accepts objects responding to #as_json which #{cap.class} does not"
327-
raise ArgumentError, msg
328-
end
329-
cap.as_json
330-
}.inject(:merge)
331-
end
332-
333321
def service_url(service)
334322
@service_manager = service.launch
335323
@service_manager.uri

rb/lib/selenium/webdriver/common/local_driver.rb

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,26 @@
2020
module Selenium
2121
module WebDriver
2222
module LocalDriver
23-
def initialize_local_driver(capabilities, options, service, url)
23+
def initialize_local_driver(options, service, url)
2424
raise ArgumentError, "Can't initialize #{self.class} with :url" if url
2525

2626
service ||= Service.send(browser)
27-
caps = process_options(options, capabilities, service)
27+
caps = process_options(options, service)
2828
url = service_url(service)
2929

3030
[caps, url]
3131
end
3232

33-
def process_options(options, capabilities, service)
33+
def process_options(options, service)
3434
default_options = Options.send(browser)
35+
options ||= default_options
3536

36-
if options && capabilities
37-
msg = "Don't use both :options and :capabilities when initializing #{self.class}, prefer :options"
38-
raise ArgumentError, msg
39-
elsif options && !options.is_a?(default_options.class)
37+
unless options.is_a?(default_options.class)
4038
raise ArgumentError, ":options must be an instance of #{default_options.class}"
41-
elsif capabilities
42-
WebDriver.logger.deprecate("The :capabilities parameter for #{self.class}",
43-
"an :options parameter instead to create a local #{self.class}",
44-
id: :capabilities)
45-
service.executable_path ||= WebDriver::DriverFinder.path(capabilities, service.class)
46-
generate_capabilities(capabilities)
47-
else
48-
options ||= default_options
49-
service.executable_path ||= WebDriver::DriverFinder.path(options, service.class)
50-
options.as_json
5139
end
40+
41+
service.executable_path ||= WebDriver::DriverFinder.path(options, service.class)
42+
options.as_json
5243
end
5344
end
5445
end

rb/lib/selenium/webdriver/edge/driver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ module Edge
3030
class Driver < Chromium::Driver
3131
include LocalDriver
3232

33-
def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
34-
caps, url = initialize_local_driver(capabilities, options, service, url)
33+
def initialize(options: nil, service: nil, url: nil, **opts)
34+
caps, url = initialize_local_driver(options, service, url)
3535
super(caps: caps, url: url, **opts)
3636
end
3737

rb/lib/selenium/webdriver/firefox/driver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ class Driver < WebDriver::Driver
3838

3939
include LocalDriver
4040

41-
def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
42-
caps, url = initialize_local_driver(capabilities, options, service, url)
41+
def initialize(options: nil, service: nil, url: nil, **opts)
42+
caps, url = initialize_local_driver(options, service, url)
4343
super(caps: caps, url: url, **opts)
4444
end
4545

rb/lib/selenium/webdriver/ie/driver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ class Driver < WebDriver::Driver
3131

3232
include LocalDriver
3333

34-
def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
35-
caps, url = initialize_local_driver(capabilities, options, service, url)
34+
def initialize(options: nil, service: nil, url: nil, **opts)
35+
caps, url = initialize_local_driver(options, service, url)
3636
super(caps: caps, url: url, **opts)
3737
end
3838

rb/lib/selenium/webdriver/remote/driver.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ def process_options(options, capabilities)
6060
end
6161
options ? options.as_json : generate_capabilities(capabilities)
6262
end
63+
64+
def generate_capabilities(capabilities)
65+
Array(capabilities).map { |cap|
66+
if cap.is_a? Symbol
67+
cap = WebDriver::Options.send(cap)
68+
elsif !cap.respond_to? :as_json
69+
msg = ":capabilities parameter only accepts objects responding to #as_json which #{cap.class} does not"
70+
raise ArgumentError, msg
71+
end
72+
cap.as_json
73+
}.inject(:merge)
74+
end
6375
end # Driver
6476
end # Remote
6577
end # WebDriver

rb/lib/selenium/webdriver/safari/driver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class Driver < WebDriver::Driver
3232

3333
include LocalDriver
3434

35-
def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
36-
caps, url = initialize_local_driver(capabilities, options, service, url)
35+
def initialize(options: nil, service: nil, url: nil, **opts)
36+
caps, url = initialize_local_driver(options, service, url)
3737
super(caps: caps, url: url, **opts)
3838
end
3939

rb/spec/unit/selenium/webdriver/chrome/driver_spec.rb

Lines changed: 0 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -88,116 +88,6 @@ def expect_request(body: nil, endpoint: nil)
8888
described_class.new(options: Options.firefox)
8989
}.to raise_exception(ArgumentError, ':options must be an instance of Selenium::WebDriver::Chrome::Options')
9090
end
91-
92-
it 'does not allow both Options and Capabilities' do
93-
msg = "Don't use both :options and :capabilities when initializing Selenium::WebDriver::Chrome::Driver, " \
94-
'prefer :options'
95-
expect {
96-
described_class.new(options: Options.new, capabilities: Remote::Capabilities.new(browser_name: 'chrome'))
97-
}.to raise_exception(ArgumentError, msg)
98-
end
99-
100-
context 'with :capabilities' do
101-
before { allow(DriverFinder).to receive(:path) }
102-
103-
it 'accepts value as a Symbol' do
104-
expect_request
105-
expect { described_class.new(capabilities: :chrome) }.to have_deprecated(:capabilities)
106-
end
107-
108-
it 'accepts constructed Capabilities with Snake Case as Symbols' do
109-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
110-
111-
expect {
112-
capabilities = Remote::Capabilities.new(browser_name: 'chrome', invalid: 'foobar')
113-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
114-
}.to have_deprecated(:capabilities)
115-
end
116-
117-
it 'accepts constructed Capabilities with Camel Case as Symbols' do
118-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
119-
120-
expect {
121-
capabilities = Remote::Capabilities.new(browserName: 'chrome', invalid: 'foobar')
122-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
123-
}.to have_deprecated(:capabilities)
124-
end
125-
126-
it 'accepts constructed Capabilities with Camel Case as Strings' do
127-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
128-
129-
expect {
130-
capabilities = Remote::Capabilities.new('browserName' => 'chrome', 'invalid' => 'foobar')
131-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
132-
}.to have_deprecated(:capabilities)
133-
end
134-
135-
context 'when value is an Array' do
136-
let(:as_json_object) do
137-
Class.new do
138-
def as_json(*)
139-
{'company:key': 'value'}
140-
end
141-
end
142-
end
143-
144-
it 'with Options instance' do
145-
options = Options.new(args: ['-f'])
146-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome',
147-
'goog:chromeOptions': {args: ['-f']}}}})
148-
149-
expect {
150-
expect {
151-
described_class.new(capabilities: [options])
152-
}.not_to raise_exception
153-
}.to have_deprecated(:capabilities)
154-
end
155-
156-
it 'with Options instance with profile' do
157-
profile = Profile.new.tap(&:layout_on_disk)
158-
allow(profile).to receive(:directory).and_return('PROF_DIR')
159-
options = Options.new(profile: profile)
160-
161-
expect_request(body: {capabilities:
162-
{alwaysMatch: {browserName: 'chrome',
163-
'goog:chromeOptions': {args: ['--user-data-dir=PROF_DIR']}}}})
164-
165-
expect {
166-
expect {
167-
described_class.new(capabilities: [options])
168-
}.not_to raise_exception
169-
}.to have_deprecated(:capabilities)
170-
end
171-
172-
it 'with Capabilities instance' do
173-
capabilities = Remote::Capabilities.new(browser_name: 'chrome', invalid: 'foobar')
174-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
175-
176-
expect { described_class.new(capabilities: [capabilities]) }.to have_deprecated(:capabilities)
177-
end
178-
179-
it 'with Options instance and an instance of a custom object responding to #as_json' do
180-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome',
181-
'goog:chromeOptions': {},
182-
'company:key': 'value'}}})
183-
expect {
184-
described_class.new(capabilities: [Options.new, as_json_object.new])
185-
}.to have_deprecated(:capabilities)
186-
end
187-
188-
it 'with Options instance, Capabilities instance and instance of a custom object responding to #as_json' do
189-
capabilities = Remote::Capabilities.new(browser_name: 'chrome', invalid: 'foobar')
190-
options = Options.new(args: ['-f'])
191-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar',
192-
'goog:chromeOptions': {args: ['-f']},
193-
'company:key': 'value'}}})
194-
195-
expect {
196-
described_class.new(capabilities: [capabilities, options, as_json_object.new])
197-
}.to have_deprecated(:capabilities)
198-
end
199-
end
200-
end
20191
end
20292
end # Chrome
20393
end # WebDriver

rb/spec/unit/selenium/webdriver/edge/driver_spec.rb

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -94,105 +94,6 @@ def expect_request(body: nil, endpoint: nil)
9494
described_class.new(options: Options.chrome)
9595
}.to raise_exception(ArgumentError, ':options must be an instance of Selenium::WebDriver::Edge::Options')
9696
end
97-
98-
it 'does not allow both Options and Capabilities' do
99-
msg = "Don't use both :options and :capabilities when initializing Selenium::WebDriver::Edge::Driver, " \
100-
'prefer :options'
101-
expect {
102-
described_class.new(options: Options.new, capabilities: Remote::Capabilities.new(browser_name: 'msedge'))
103-
}.to raise_exception(ArgumentError, msg)
104-
end
105-
106-
context 'with :capabilities' do
107-
before { allow(DriverFinder).to receive(:path) }
108-
109-
it 'accepts value as a Symbol' do
110-
expect_request
111-
expect {
112-
expect {
113-
described_class.new(capabilities: :edge)
114-
}.to have_deprecated(:capabilities)
115-
}.not_to raise_exception
116-
end
117-
118-
it 'accepts constructed Capabilities with Snake Case as Symbols' do
119-
capabilities = Remote::Capabilities.new(browser_name: 'MicrosoftEdge', invalid: 'foobar')
120-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
121-
122-
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
123-
end
124-
125-
it 'accepts constructed Capabilities with Camel Case as Symbols' do
126-
capabilities = Remote::Capabilities.new(browserName: 'MicrosoftEdge', invalid: 'foobar')
127-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
128-
129-
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
130-
end
131-
132-
it 'accepts constructed Capabilities with Camel Case as Strings' do
133-
capabilities = Remote::Capabilities.new('browserName' => 'MicrosoftEdge', 'invalid' => 'foobar')
134-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
135-
136-
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
137-
end
138-
139-
context 'when value is an Array' do
140-
let(:as_json_object) do
141-
Class.new do
142-
def as_json(*)
143-
{'company:key': 'value'}
144-
end
145-
end
146-
end
147-
148-
it 'with Options instance' do
149-
options = Options.new(args: ['-f'])
150-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge',
151-
'ms:edgeOptions': {args: ['-f']}}}})
152-
153-
expect { described_class.new(capabilities: [options]) }.to have_deprecated(:capabilities)
154-
end
155-
156-
it 'with Options instance with profile' do
157-
profile = Profile.new.tap(&:layout_on_disk)
158-
allow(profile).to receive(:directory).and_return('PROF_DIR')
159-
options = Options.new(profile: profile)
160-
expect_request(body: {capabilities:
161-
{alwaysMatch: {browserName: 'MicrosoftEdge',
162-
'ms:edgeOptions': {args: ['--user-data-dir=PROF_DIR']}}}})
163-
164-
expect { described_class.new(capabilities: [options]) }.to have_deprecated(:capabilities)
165-
end
166-
167-
it 'with Capabilities instance' do
168-
capabilities = Remote::Capabilities.new(browser_name: 'MicrosoftEdge', invalid: 'foobar')
169-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
170-
171-
expect { described_class.new(capabilities: [capabilities]) }.to have_deprecated(:capabilities)
172-
end
173-
174-
it 'with Options instance and an instance of a custom object responding to #as_json' do
175-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge',
176-
'ms:edgeOptions': {},
177-
'company:key': 'value'}}})
178-
expect {
179-
described_class.new(capabilities: [Options.new, as_json_object.new])
180-
}.to have_deprecated(:capabilities)
181-
end
182-
183-
it 'with Options instance, Capabilities instance and instance of a custom object responding to #as_json' do
184-
capabilities = Remote::Capabilities.new(browser_name: 'MicrosoftEdge', invalid: 'foobar')
185-
options = Options.new(args: ['-f'])
186-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar',
187-
'ms:edgeOptions': {args: ['-f']},
188-
'company:key': 'value'}}})
189-
190-
expect {
191-
described_class.new(capabilities: [capabilities, options, as_json_object.new])
192-
}.to have_deprecated(:capabilities)
193-
end
194-
end
195-
end
19697
end
19798
end # Chrome
19899
end # WebDriver

0 commit comments

Comments
 (0)