Skip to content

Commit 9dc5a1c

Browse files
committed
[rb] deprecate using :capabilities in local drivers
this brings the implementation in line with other bindings that all require :options parameters and objects
1 parent 494c4e3 commit 9dc5a1c

11 files changed

Lines changed: 101 additions & 58 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def process_options(options, capabilities)
5353
options = Options.new
5454
end
5555

56-
super(options, capabilities)
56+
super(options, capabilities, Options)
5757
end
5858
end # Driver
5959
end # Chrome

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,22 @@ def create_bridge(caps:, url:, http_client: nil)
314314
end
315315
end
316316

317-
def process_options(options, capabilities)
317+
def process_options(options, capabilities, klass = nil)
318318
if options && capabilities
319319
msg = "Don't use both :options and :capabilities when initializing #{self.class}, prefer :options"
320320
raise ArgumentError, msg
321321
end
322322

323-
options ? options.as_json : generate_capabilities(capabilities)
323+
options ? options.as_json : deprecate_capabilities(capabilities, klass)
324+
end
325+
326+
def deprecate_capabilities(capabilities, klass)
327+
if klass
328+
WebDriver.logger.deprecate("The :capabilities parameter for #{self.class}",
329+
":options argument with an instance of #{klass}",
330+
id: :capabilities)
331+
end
332+
generate_capabilities(capabilities)
324333
end
325334

326335
def generate_capabilities(capabilities)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def process_options(options, capabilities)
5353
options = Options.new
5454
end
5555

56-
super(options, capabilities)
56+
super(options, capabilities, Options)
5757
end
5858
end # Driver
5959
end # Edge

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def process_options(options, capabilities)
7272
options = Options.new
7373
end
7474

75-
super(options, capabilities)
75+
super(options, capabilities, Options)
7676
end
7777
end # Driver
7878
end # Firefox

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def process_options(options, capabilities)
5050
options = Options.new
5151
end
5252

53-
super(options, capabilities)
53+
super(options, capabilities, Options)
5454
end
5555
end # Driver
5656
end # IE

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def process_options(options, capabilities)
5151
options = Options.new
5252
end
5353

54-
super(options, capabilities)
54+
super(options, capabilities, Options)
5555
end
5656
end # Driver
5757
end # Safari

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

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,35 +71,43 @@ def expect_request(body: nil, endpoint: nil)
7171
context 'with :capabilities' do
7272
it 'accepts value as a Symbol' do
7373
expect_request
74-
expect { described_class.new(capabilities: :chrome) }.not_to raise_exception
74+
expect { described_class.new(capabilities: :chrome) }.to have_deprecated(:capabilities)
7575
end
7676

7777
it 'accepts Capabilities.chrome' do
78-
capabilities = Remote::Capabilities.chrome(invalid: 'foobar')
7978
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
8079

81-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
80+
expect {
81+
capabilities = Remote::Capabilities.chrome(invalid: 'foobar')
82+
described_class.new(capabilities: capabilities)
83+
}.to have_deprecated(:capabilities)
8284
end
8385

8486
it 'accepts constructed Capabilities with Snake Case as Symbols' do
85-
capabilities = Remote::Capabilities.new(browser_name: 'chrome', invalid: 'foobar')
8687
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
8788

88-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
89+
expect {
90+
capabilities = Remote::Capabilities.new(browser_name: 'chrome', invalid: 'foobar')
91+
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
92+
}.to have_deprecated(:capabilities)
8993
end
9094

9195
it 'accepts constructed Capabilities with Camel Case as Symbols' do
92-
capabilities = Remote::Capabilities.new(browserName: 'chrome', invalid: 'foobar')
9396
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
9497

95-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
98+
expect {
99+
capabilities = Remote::Capabilities.new(browserName: 'chrome', invalid: 'foobar')
100+
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
101+
}.to have_deprecated(:capabilities)
96102
end
97103

98104
it 'accepts constructed Capabilities with Camel Case as Strings' do
99-
capabilities = Remote::Capabilities.new('browserName' => 'chrome', 'invalid' => 'foobar')
100105
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
101106

102-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
107+
expect {
108+
capabilities = Remote::Capabilities.new('browserName' => 'chrome', 'invalid' => 'foobar')
109+
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
110+
}.to have_deprecated(:capabilities)
103111
end
104112

105113
context 'when value is an Array' do
@@ -116,7 +124,11 @@ def as_json(*)
116124
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome',
117125
'goog:chromeOptions': {args: ['-f']}}}})
118126

119-
expect { described_class.new(capabilities: [options]) }.not_to raise_exception
127+
expect {
128+
expect {
129+
described_class.new(capabilities: [options])
130+
}.not_to raise_exception
131+
}.to have_deprecated(:capabilities)
120132
end
121133

122134
it 'with Options instance with profile' do
@@ -128,21 +140,27 @@ def as_json(*)
128140
{alwaysMatch: {browserName: 'chrome',
129141
'goog:chromeOptions': {args: ['--user-data-dir=PROF_DIR']}}}})
130142

131-
expect { described_class.new(capabilities: [options]) }.not_to raise_exception
143+
expect {
144+
expect {
145+
described_class.new(capabilities: [options])
146+
}.not_to raise_exception
147+
}.to have_deprecated(:capabilities)
132148
end
133149

134150
it 'with Capabilities instance' do
135151
capabilities = Remote::Capabilities.new(browser_name: 'chrome', invalid: 'foobar')
136152
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
137153

138-
expect { described_class.new(capabilities: [capabilities]) }.not_to raise_exception
154+
expect { described_class.new(capabilities: [capabilities]) }.to have_deprecated(:capabilities)
139155
end
140156

141157
it 'with Options instance and an instance of a custom object responding to #as_json' do
142158
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome',
143159
'goog:chromeOptions': {},
144160
'company:key': 'value'}}})
145-
expect { described_class.new(capabilities: [Options.new, as_json_object.new]) }.not_to raise_exception
161+
expect {
162+
described_class.new(capabilities: [Options.new, as_json_object.new])
163+
}.to have_deprecated(:capabilities)
146164
end
147165

148166
it 'with Options instance, Capabilities instance and instance of a custom object responding to #as_json' do
@@ -154,7 +172,7 @@ def as_json(*)
154172

155173
expect {
156174
described_class.new(capabilities: [capabilities, options, as_json_object.new])
157-
}.not_to raise_exception
175+
}.to have_deprecated(:capabilities)
158176
end
159177
end
160178
end

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,35 +76,39 @@ def expect_request(body: nil, endpoint: nil)
7676
context 'with :capabilities' do
7777
it 'accepts value as a Symbol' do
7878
expect_request
79-
expect { described_class.new(capabilities: :edge) }.not_to raise_exception
79+
expect {
80+
expect {
81+
described_class.new(capabilities: :edge)
82+
}.to have_deprecated(:capabilities)
83+
}.not_to raise_exception
8084
end
8185

8286
it 'accepts Capabilities.edge' do
8387
capabilities = Remote::Capabilities.edge(invalid: 'foobar')
8488
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
8589

86-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
90+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
8791
end
8892

8993
it 'accepts constructed Capabilities with Snake Case as Symbols' do
9094
capabilities = Remote::Capabilities.new(browser_name: 'MicrosoftEdge', invalid: 'foobar')
9195
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
9296

93-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
97+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
9498
end
9599

96100
it 'accepts constructed Capabilities with Camel Case as Symbols' do
97101
capabilities = Remote::Capabilities.new(browserName: 'MicrosoftEdge', invalid: 'foobar')
98102
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
99103

100-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
104+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
101105
end
102106

103107
it 'accepts constructed Capabilities with Camel Case as Strings' do
104108
capabilities = Remote::Capabilities.new('browserName' => 'MicrosoftEdge', 'invalid' => 'foobar')
105109
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
106110

107-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
111+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
108112
end
109113

110114
context 'when value is an Array' do
@@ -121,7 +125,7 @@ def as_json(*)
121125
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge',
122126
'ms:edgeOptions': {args: ['-f']}}}})
123127

124-
expect { described_class.new(capabilities: [options]) }.not_to raise_exception
128+
expect { described_class.new(capabilities: [options]) }.to have_deprecated(:capabilities)
125129
end
126130

127131
it 'with Options instance with profile' do
@@ -132,21 +136,23 @@ def as_json(*)
132136
{alwaysMatch: {browserName: 'MicrosoftEdge',
133137
'ms:edgeOptions': {args: ['--user-data-dir=PROF_DIR']}}}})
134138

135-
expect { described_class.new(capabilities: [options]) }.not_to raise_exception
139+
expect { described_class.new(capabilities: [options]) }.to have_deprecated(:capabilities)
136140
end
137141

138142
it 'with Capabilities instance' do
139143
capabilities = Remote::Capabilities.new(browser_name: 'MicrosoftEdge', invalid: 'foobar')
140144
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
141145

142-
expect { described_class.new(capabilities: [capabilities]) }.not_to raise_exception
146+
expect { described_class.new(capabilities: [capabilities]) }.to have_deprecated(:capabilities)
143147
end
144148

145149
it 'with Options instance and an instance of a custom object responding to #as_json' do
146150
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge',
147151
'ms:edgeOptions': {},
148152
'company:key': 'value'}}})
149-
expect { described_class.new(capabilities: [Options.new, as_json_object.new]) }.not_to raise_exception
153+
expect {
154+
described_class.new(capabilities: [Options.new, as_json_object.new])
155+
}.to have_deprecated(:capabilities)
150156
end
151157

152158
it 'with Options instance, Capabilities instance and instance of a custom object responding to #as_json' do
@@ -158,7 +164,7 @@ def as_json(*)
158164

159165
expect {
160166
described_class.new(capabilities: [capabilities, options, as_json_object.new])
161-
}.not_to raise_exception
167+
}.to have_deprecated(:capabilities)
162168
end
163169
end
164170
end

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,35 +76,35 @@ def expect_request(body: nil, endpoint: nil)
7676
context 'with :capabilities' do
7777
it 'accepts value as a Symbol' do
7878
expect_request
79-
expect { described_class.new(capabilities: :firefox) }.not_to raise_exception
79+
expect { described_class.new(capabilities: :firefox) }.to have_deprecated(:capabilities)
8080
end
8181

8282
it 'accepts Capabilities.firefox' do
8383
capabilities = Remote::Capabilities.firefox(invalid: 'foobar')
8484
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'firefox', invalid: 'foobar'}}})
8585

86-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
86+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
8787
end
8888

8989
it 'accepts constructed Capabilities with Snake Case as Symbols' do
9090
capabilities = Remote::Capabilities.new(browser_name: 'firefox', invalid: 'foobar')
9191
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'firefox', invalid: 'foobar'}}})
9292

93-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
93+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
9494
end
9595

9696
it 'accepts constructed Capabilities with Camel Case as Symbols' do
9797
capabilities = Remote::Capabilities.new(browserName: 'firefox', invalid: 'foobar')
9898
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'firefox', invalid: 'foobar'}}})
9999

100-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
100+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
101101
end
102102

103103
it 'accepts constructed Capabilities with Camel Case as Strings' do
104104
capabilities = Remote::Capabilities.new('browserName' => 'firefox', 'invalid' => 'foobar')
105105
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'firefox', invalid: 'foobar'}}})
106106

107-
expect { described_class.new(capabilities: capabilities) }.not_to raise_exception
107+
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
108108
end
109109

110110
context 'when value is an Array' do
@@ -122,14 +122,14 @@ def as_json(*)
122122
browserName: 'firefox',
123123
'moz:firefoxOptions': {args: ['-f']},
124124
'moz:debuggerAddress': true}}})
125-
expect { described_class.new(capabilities: [options]) }.not_to raise_exception
125+
expect { described_class.new(capabilities: [options]) }.to have_deprecated(:capabilities)
126126
end
127127

128128
it 'with Capabilities instance' do
129129
capabilities = Remote::Capabilities.new(browser_name: 'firefox', invalid: 'foobar')
130130
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'firefox', invalid: 'foobar'}}})
131131

132-
expect { described_class.new(capabilities: [capabilities]) }.not_to raise_exception
132+
expect { described_class.new(capabilities: [capabilities]) }.to have_deprecated(:capabilities)
133133
end
134134

135135
it 'with Options instance and an instance of a custom object responding to #as_json' do
@@ -138,7 +138,9 @@ def as_json(*)
138138
'moz:firefoxOptions': {},
139139
'moz:debuggerAddress': true,
140140
'company:key': 'value'}}})
141-
expect { described_class.new(capabilities: [Options.new, as_json_object.new]) }.not_to raise_exception
141+
expect {
142+
described_class.new(capabilities: [Options.new, as_json_object.new])
143+
}.to have_deprecated(:capabilities)
142144
end
143145

144146
it 'with Options instance, Capabilities instance and instance of a custom object responding to #as_json' do
@@ -152,7 +154,7 @@ def as_json(*)
152154

153155
expect {
154156
described_class.new(capabilities: [capabilities, options, as_json_object.new])
155-
}.not_to raise_exception
157+
}.to have_deprecated(:capabilities)
156158
end
157159
end
158160
end

0 commit comments

Comments
 (0)