Skip to content

Commit 1e38079

Browse files
committed
[rb] deprecate browser class methods for Capabilities
This matches what Java did in 3.x to encourage people to move to the Options classes.
1 parent 9dc5a1c commit 1e38079

File tree

9 files changed

+67
-105
lines changed

9 files changed

+67
-105
lines changed

rb/lib/selenium/webdriver/remote/capabilities.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,38 +83,46 @@ def platform=(value)
8383

8484
class << self
8585
def chrome(opts = {})
86+
WebDriver.logger.deprecate('Remote::Capabilities.chrome', 'Options.chrome', id: :caps_browsers)
8687
new({
8788
browser_name: 'chrome'
8889
}.merge(opts))
8990
end
9091

9192
def edge(opts = {})
93+
WebDriver.logger.deprecate('Remote::Capabilities.edge', 'Options.edge', id: :caps_browsers)
9294
new({
9395
browser_name: 'MicrosoftEdge'
9496
}.merge(opts))
9597
end
9698
alias microsoftedge edge
9799

98100
def firefox(opts = {})
101+
WebDriver.logger.deprecate('Remote::Capabilities.firefox', 'Options.firefox', id: :caps_browsers)
99102
new({
100103
browser_name: 'firefox'
101104
}.merge(opts))
102105
end
103106
alias ff firefox
104107

105108
def safari(opts = {})
109+
WebDriver.logger.deprecate('Remote::Capabilities.safari', 'Options.safari', id: :caps_browsers)
106110
new({
107111
browser_name: Selenium::WebDriver::Safari.technology_preview? ? 'Safari Technology Preview' : 'safari'
108112
}.merge(opts))
109113
end
110114

111115
def htmlunit(opts = {})
116+
WebDriver.logger.deprecate('Remote::Capabilities.htmlunit',
117+
'as argument in constructor',
118+
id: :caps_browsers)
112119
new({
113120
browser_name: 'htmlunit'
114121
}.merge(opts))
115122
end
116123

117124
def internet_explorer(opts = {})
125+
WebDriver.logger.deprecate('Remote::Capabilities.ie', 'Options.ie', id: :caps_browsers)
118126
new({
119127
browser_name: 'internet explorer',
120128
platform_name: :windows

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

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module Chrome
2727
let(:service_manager) { instance_double(ServiceManager, uri: 'http://example.com') }
2828
let(:valid_response) do
2929
{status: 200,
30-
body: {value: {sessionId: 0, capabilities: Remote::Capabilities.chrome}}.to_json,
30+
body: {value: {sessionId: 0, capabilities: {browserName: 'chrome'}}}.to_json,
3131
headers: {content_type: 'application/json'}}
3232
end
3333

@@ -64,7 +64,7 @@ def expect_request(body: nil, endpoint: nil)
6464
msg = "Don't use both :options and :capabilities when initializing Selenium::WebDriver::Chrome::Driver, " \
6565
'prefer :options'
6666
expect {
67-
described_class.new(options: Options.new, capabilities: Remote::Capabilities.chrome)
67+
described_class.new(options: Options.new, capabilities: Remote::Capabilities.new(browser_name: 'chrome'))
6868
}.to raise_exception(ArgumentError, msg)
6969
end
7070

@@ -74,15 +74,6 @@ def expect_request(body: nil, endpoint: nil)
7474
expect { described_class.new(capabilities: :chrome) }.to have_deprecated(:capabilities)
7575
end
7676

77-
it 'accepts Capabilities.chrome' do
78-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
79-
80-
expect {
81-
capabilities = Remote::Capabilities.chrome(invalid: 'foobar')
82-
described_class.new(capabilities: capabilities)
83-
}.to have_deprecated(:capabilities)
84-
end
85-
8677
it 'accepts constructed Capabilities with Snake Case as Symbols' do
8778
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'chrome', invalid: 'foobar'}}})
8879

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module Edge
2727
let(:service_manager) { instance_double(ServiceManager, uri: 'http://example.com') }
2828
let(:valid_response) do
2929
{status: 200,
30-
body: {value: {sessionId: 0, capabilities: Remote::Capabilities.edge}}.to_json,
30+
body: {value: {sessionId: 0, capabilities: {browserName: 'MicrosoftEdge'}}}.to_json,
3131
headers: {content_type: 'application/json'}}
3232
end
3333

@@ -69,7 +69,7 @@ def expect_request(body: nil, endpoint: nil)
6969
msg = "Don't use both :options and :capabilities when initializing Selenium::WebDriver::Edge::Driver, " \
7070
'prefer :options'
7171
expect {
72-
described_class.new(options: Options.new, capabilities: Remote::Capabilities.edge)
72+
described_class.new(options: Options.new, capabilities: Remote::Capabilities.new(browser_name: 'msedge'))
7373
}.to raise_exception(ArgumentError, msg)
7474
end
7575

@@ -83,13 +83,6 @@ def expect_request(body: nil, endpoint: nil)
8383
}.not_to raise_exception
8484
end
8585

86-
it 'accepts Capabilities.edge' do
87-
capabilities = Remote::Capabilities.edge(invalid: 'foobar')
88-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})
89-
90-
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
91-
end
92-
9386
it 'accepts constructed Capabilities with Snake Case as Symbols' do
9487
capabilities = Remote::Capabilities.new(browser_name: 'MicrosoftEdge', invalid: 'foobar')
9588
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'MicrosoftEdge', invalid: 'foobar'}}})

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module Firefox
2727
let(:service_manager) { instance_double(ServiceManager, uri: 'http://example.com') }
2828
let(:valid_response) do
2929
{status: 200,
30-
body: {value: {sessionId: 0, capabilities: Remote::Capabilities.firefox}}.to_json,
30+
body: {value: {sessionId: 0, capabilities: {browserName: 'firefox'}}}.to_json,
3131
headers: {content_type: 'application/json'}}
3232
end
3333

@@ -69,7 +69,7 @@ def expect_request(body: nil, endpoint: nil)
6969
msg = "Don't use both :options and :capabilities when initializing Selenium::WebDriver::Firefox::Driver, " \
7070
'prefer :options'
7171
expect {
72-
described_class.new(options: Options.new, capabilities: Remote::Capabilities.firefox)
72+
described_class.new(options: Options.new, capabilities: Remote::Capabilities.new(browser_name: 'firefox'))
7373
}.to raise_exception(ArgumentError, msg)
7474
end
7575

@@ -79,13 +79,6 @@ def expect_request(body: nil, endpoint: nil)
7979
expect { described_class.new(capabilities: :firefox) }.to have_deprecated(:capabilities)
8080
end
8181

82-
it 'accepts Capabilities.firefox' do
83-
capabilities = Remote::Capabilities.firefox(invalid: 'foobar')
84-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'firefox', invalid: 'foobar'}}})
85-
86-
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
87-
end
88-
8982
it 'accepts constructed Capabilities with Snake Case as Symbols' do
9083
capabilities = Remote::Capabilities.new(browser_name: 'firefox', invalid: 'foobar')
9184
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'firefox', invalid: 'foobar'}}})

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

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module IE
2727
let(:service_manager) { instance_double(ServiceManager, uri: 'http://example.com') }
2828
let(:valid_response) do
2929
{status: 200,
30-
body: {value: {sessionId: 0, capabilities: Remote::Capabilities.ie}}.to_json,
30+
body: {value: {sessionId: 0, capabilities: {browserName: 'internet explorer'}}}.to_json,
3131
headers: {content_type: 'application/json'}}
3232
end
3333

@@ -67,7 +67,8 @@ def expect_request(body: nil, endpoint: nil)
6767
msg = "Don't use both :options and :capabilities when initializing Selenium::WebDriver::IE::Driver, " \
6868
'prefer :options'
6969
expect {
70-
described_class.new(options: Options.new, capabilities: Remote::Capabilities.ie)
70+
described_class.new(options: Options.new,
71+
capabilities: Remote::Capabilities.new(browser_name: 'internet explorer'))
7172
}.to raise_exception(ArgumentError, msg)
7273
end
7374

@@ -77,15 +78,6 @@ def expect_request(body: nil, endpoint: nil)
7778
expect { described_class.new(capabilities: :ie) }.to have_deprecated(:capabilities)
7879
end
7980

80-
it 'accepts Capabilities.ie' do
81-
capabilities = Remote::Capabilities.ie(invalid: 'foobar')
82-
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'internet explorer',
83-
platformName: 'windows',
84-
invalid: 'foobar'}}})
85-
86-
expect { described_class.new(capabilities: capabilities) }.to have_deprecated(:capabilities)
87-
end
88-
8981
it 'accepts constructed Capabilities with Snake Case as Symbols' do
9082
capabilities = Remote::Capabilities.new(browser_name: 'internet explorer', invalid: 'foobar')
9183
expect_request(body: {capabilities: {alwaysMatch: {browserName: 'internet explorer', invalid: 'foobar'}}})

rb/spec/unit/selenium/webdriver/remote/bridge_spec.rb

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,11 @@ module Remote
3333
let(:http) { WebDriver::Remote::Http::Default.new }
3434
let(:bridge) { described_class.new(http_client: http, url: 'http://localhost') }
3535

36-
it 'sends plain capabilities' do
36+
it 'accepts Hash' do
3737
payload = JSON.generate(
3838
capabilities: {
3939
alwaysMatch: {
40-
browserName: 'internet explorer',
41-
platformName: 'windows'
40+
browserName: 'internet explorer'
4241
}
4342
}
4443
)
@@ -47,27 +46,7 @@ module Remote
4746
.with(any_args, payload)
4847
.and_return('status' => 200, 'value' => {'sessionId' => 'foo', 'capabilities' => {}})
4948

50-
bridge.create_session(Capabilities.ie)
51-
expect(http).to have_received(:request).with(any_args, payload)
52-
end
53-
54-
it 'passes options as capabilities' do
55-
payload = JSON.generate(
56-
capabilities: {
57-
alwaysMatch: {
58-
'browserName' => 'chrome',
59-
'goog:chromeOptions' => {
60-
args: %w[foo bar]
61-
}
62-
}
63-
}
64-
)
65-
66-
allow(http).to receive(:request)
67-
.with(any_args, payload)
68-
.and_return('status' => 200, 'value' => {'sessionId' => 'foo', 'capabilities' => {}})
69-
70-
bridge.create_session(Options.chrome(args: %w[foo bar]).as_json)
49+
bridge.create_session(browserName: 'internet explorer')
7150
expect(http).to have_received(:request).with(any_args, payload)
7251
end
7352

@@ -84,7 +63,7 @@ module Remote
8463
.with(any_args, payload)
8564
.and_return('status' => 200, 'value' => {'sessionId' => 'foo', 'capabilities' => {}})
8665

87-
bridge.create_session(Capabilities.always_match(Capabilities.chrome).as_json)
66+
bridge.create_session('alwaysMatch' => {'browserName' => 'chrome'})
8867
expect(http).to have_received(:request).with(any_args, payload)
8968
end
9069

@@ -102,7 +81,10 @@ module Remote
10281
.with(any_args, payload)
10382
.and_return('status' => 200, 'value' => {'sessionId' => 'foo', 'capabilities' => {}})
10483

105-
bridge.create_session(Capabilities.first_match(Capabilities.chrome, Capabilities.firefox).as_json)
84+
bridge.create_session('firstMatch' => [
85+
{'browserName' => 'chrome'},
86+
{'browserName' => 'firefox'}
87+
])
10688
expect(http).to have_received(:request).with(any_args, payload)
10789
end
10890

rb/spec/unit/selenium/webdriver/remote/capabilities_spec.rb

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,28 +24,45 @@ module WebDriver
2424
module Remote
2525
describe Capabilities do
2626
it 'has default capabilities for Chrome' do
27-
caps = described_class.chrome
28-
expect(caps.browser_name).to eq('chrome')
27+
expect {
28+
caps = described_class.chrome
29+
expect(caps.browser_name).to eq('chrome')
30+
}.to have_deprecated(:caps_browsers)
2931
end
3032

3133
it 'has default capabilities for Edge' do
32-
caps = described_class.edge
33-
expect(caps.browser_name).to eq('MicrosoftEdge')
34+
expect {
35+
caps = described_class.edge
36+
expect(caps.browser_name).to eq('MicrosoftEdge')
37+
}.to have_deprecated(:caps_browsers)
3438
end
3539

3640
it 'has default capabilities for Firefox' do
37-
caps = described_class.firefox
38-
expect(caps.browser_name).to eq('firefox')
41+
expect {
42+
caps = described_class.firefox
43+
expect(caps.browser_name).to eq('firefox')
44+
}.to have_deprecated(:caps_browsers)
3945
end
4046

4147
it 'has default capabilities for HtmlUnit' do
42-
caps = described_class.htmlunit
43-
expect(caps.browser_name).to eq('htmlunit')
48+
expect {
49+
caps = described_class.htmlunit
50+
expect(caps.browser_name).to eq('htmlunit')
51+
}.to have_deprecated(:caps_browsers)
4452
end
4553

4654
it 'has default capabilities for Internet Explorer' do
47-
caps = described_class.internet_explorer
48-
expect(caps.browser_name).to eq('internet explorer')
55+
expect {
56+
caps = described_class.internet_explorer
57+
expect(caps.browser_name).to eq('internet explorer')
58+
}.to have_deprecated(:caps_browsers)
59+
end
60+
61+
it 'has default capabilities for Safari' do
62+
expect {
63+
caps = described_class.safari
64+
expect(caps.browser_name).to eq('safari')
65+
}.to have_deprecated(:caps_browsers)
4966
end
5067

5168
it 'converts noProxy from string to array' do
@@ -75,7 +92,7 @@ module Remote
7592
end
7693

7794
it 'can set and get arbitrary capabilities' do
78-
caps = described_class.chrome
95+
caps = described_class.new(browser_name: 'chrome')
7996
caps['chrome'] = :foo
8097
expect(caps['chrome']).to eq(:foo)
8198
end
@@ -99,8 +116,8 @@ module Remote
99116
end
100117

101118
it 'can merge capabilities' do
102-
a = described_class.chrome
103-
b = described_class.firefox
119+
a = described_class.new(browser_name: 'chrome')
120+
b = described_class.new(browser_name: 'firefox')
104121
a.merge!(b)
105122

106123
expect(a.browser_name).to eq('firefox')
@@ -121,7 +138,7 @@ module Remote
121138
expected = {'alwaysMatch' => {'browserName' => 'chrome'}}
122139
expect(described_class.always_match(browser_name: 'chrome').as_json).to eq(expected)
123140
expect(described_class.always_match('browserName' => 'chrome').as_json).to eq(expected)
124-
expect(described_class.always_match(described_class.chrome).as_json).to eq(expected)
141+
expect(described_class.always_match(described_class.new(browser_name: 'chrome')).as_json).to eq(expected)
125142
end
126143

127144
it 'allows to set firstMatch' do
@@ -130,7 +147,8 @@ module Remote
130147
{browser_name: 'firefox'}).as_json).to eq(expected)
131148
expect(described_class.first_match({'browserName' => 'chrome'},
132149
{'browserName' => 'firefox'}).as_json).to eq(expected)
133-
expect(described_class.first_match(described_class.chrome, described_class.firefox).as_json).to eq(expected)
150+
expect(described_class.first_match(described_class.new(browser_name: 'chrome'),
151+
described_class.new(browser_name: 'firefox')).as_json).to eq(expected)
134152
end
135153

136154
it 'sets browser version with version' do
@@ -178,7 +196,7 @@ module Remote
178196
end
179197

180198
it 'processes timeouts as hash' do
181-
caps = described_class.chrome(timeouts: {implicit: 1, page_load: 2, script: 3})
199+
caps = described_class.new(browser_name: 'chrome', timeouts: {implicit: 1, page_load: 2, script: 3})
182200
expect(caps.timeouts).to eq(implicit: 1, page_load: 2, script: 3)
183201
expect(caps.implicit_timeout).to eq(1)
184202
expect(caps.page_load_timeout).to eq(2)
@@ -187,7 +205,7 @@ module Remote
187205
end
188206

189207
it 'processes timeouts via timeouts reader' do
190-
caps = described_class.chrome
208+
caps = described_class.new(browser_name: 'chrome')
191209
caps.timeouts[:implicit] = 1
192210
caps.timeouts[:page_load] = 2
193211
caps.timeouts[:script] = 3
@@ -199,7 +217,7 @@ module Remote
199217
end
200218

201219
it 'processes timeouts via per-timeout writers' do
202-
caps = described_class.chrome
220+
caps = described_class.new(browser_name: 'chrome')
203221
caps.implicit_timeout = 1
204222
caps.page_load_timeout = 2
205223
caps.script_timeout = 3

0 commit comments

Comments
 (0)