Skip to content

Commit 88c0fd6

Browse files
committed
Stop sending OSS capabilities in new session payload
1 parent 32de9d3 commit 88c0fd6

File tree

9 files changed

+21
-128
lines changed

9 files changed

+21
-128
lines changed

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,6 @@ def create_capabilities(opts)
7373
options.native_events = native_events
7474
end
7575

76-
# Backward compatibility with older IEDriverServer versions
77-
caps[:ignore_protected_mode_settings] = options.ignore_protected_mode_settings
78-
caps[:native_events] = options.native_events
79-
8076
options = options.as_json
8177
caps.merge!(options) unless options.empty?
8278

rb/lib/selenium/webdriver/remote/bridge.rb

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -628,14 +628,12 @@ def commands(command)
628628
COMMANDS[command]
629629
end
630630

631-
def merged_capabilities(oss_capabilities, options = nil)
632-
w3c_capabilities = Capabilities.from_oss(oss_capabilities)
633-
w3c_capabilities.merge!(options.as_json) if options
631+
def merged_capabilities(capabilities, options = nil)
632+
capabilities.merge!(options.as_json) if options
634633

635634
{
636-
desiredCapabilities: oss_capabilities,
637635
capabilities: {
638-
firstMatch: [w3c_capabilities]
636+
firstMatch: [capabilities]
639637
}
640638
}
641639
end

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

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,9 @@ module Remote
2525
# Specification of the desired and/or actual capabilities of the browser that the
2626
# server is being asked to create.
2727
#
28-
# @api private
29-
#
3028

3129
class Capabilities
3230

33-
EXTENSION_CAPABILITY_PATTERN = /\A[\w-]+:.*\z/.freeze
34-
3531
KNOWN = [
3632
:browser_name,
3733
:browser_version,
@@ -92,7 +88,7 @@ def chrome(opts = {})
9288
def edge(opts = {})
9389
new({
9490
browser_name: 'MicrosoftEdge',
95-
platform: :windows
91+
platform_name: :windows
9692
}.merge(opts))
9793
end
9894

@@ -111,7 +107,7 @@ def firefox(opts = {})
111107
def safari(opts = {})
112108
new({
113109
browser_name: 'safari',
114-
platform: :mac
110+
platform_name: :mac
115111
}.merge(opts))
116112
end
117113

@@ -121,17 +117,10 @@ def htmlunit(opts = {})
121117
}.merge(opts))
122118
end
123119

124-
def htmlunitwithjs(opts = {})
125-
new({
126-
browser_name: 'htmlunit',
127-
javascript_enabled: true
128-
}.merge(opts))
129-
end
130-
131120
def internet_explorer(opts = {})
132121
new({
133122
browser_name: 'internet explorer',
134-
platform: :windows
123+
platform_name: :windows
135124
}.merge(opts))
136125
end
137126
alias_method :ie, :internet_explorer
@@ -176,56 +165,6 @@ def json_create(data)
176165

177166
caps
178167
end
179-
180-
#
181-
# Creates W3C compliant capabilities from OSS ones.
182-
# @param oss_capabilities [Hash, Remote::Capabilities]
183-
#
184-
185-
def from_oss(oss_capabilities)
186-
w3c_capabilities = new
187-
188-
# TODO: (AR) make capabilities enumerable?
189-
oss_capabilities = oss_capabilities.__send__(:capabilities) unless oss_capabilities.is_a?(Hash)
190-
oss_capabilities.each do |name, value|
191-
next if value.nil?
192-
next if value.is_a?(String) && value.empty?
193-
194-
capability_name = name.to_s
195-
196-
snake_cased_capability_names = KNOWN.map(&:to_s)
197-
camel_cased_capability_names = snake_cased_capability_names.map(&w3c_capabilities.method(:camel_case))
198-
199-
next unless snake_cased_capability_names.include?(capability_name) ||
200-
camel_cased_capability_names.include?(capability_name) ||
201-
capability_name.match(EXTENSION_CAPABILITY_PATTERN)
202-
203-
w3c_capabilities[name] = value
204-
end
205-
206-
# User can pass :firefox_options or :firefox_profile.
207-
#
208-
# TODO: (AR) Refactor this whole method into converter class.
209-
firefox_options = oss_capabilities['firefoxOptions'] || oss_capabilities['firefox_options'] || oss_capabilities[:firefox_options]
210-
firefox_profile = oss_capabilities['firefox_profile'] || oss_capabilities[:firefox_profile]
211-
firefox_binary = oss_capabilities['firefox_binary'] || oss_capabilities[:firefox_binary]
212-
213-
if firefox_profile && firefox_options
214-
second_profile = firefox_options['profile'] || firefox_options[:profile]
215-
if second_profile && firefox_profile != second_profile
216-
raise Error::WebDriverError, 'You cannot pass 2 different Firefox profiles'
217-
end
218-
end
219-
220-
if firefox_options || firefox_profile || firefox_binary
221-
options = WebDriver::Firefox::Options.new(firefox_options || {})
222-
options.binary = firefox_binary if firefox_binary
223-
options.profile = firefox_profile if firefox_profile
224-
w3c_capabilities.merge!(options.as_json)
225-
end
226-
227-
w3c_capabilities
228-
end
229168
end
230169

231170
#
@@ -281,7 +220,7 @@ def proxy=(proxy)
281220
# @api private
282221
#
283222

284-
def as_json(*) # rubocop:disable Metrics/CyclomaticComplexity
223+
def as_json(*)
285224
hash = {}
286225

287226
@capabilities.each do |key, value|

rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ def create_firefox_driver(opt = {})
225225

226226
def create_ie_driver(opt = {})
227227
opt[:desired_capabilities] ||= WebDriver::Remote::Capabilities.ie
228-
opt[:desired_capabilities]['requireWindowFocus'] = true
228+
opt[:options] ||= WebDriver::IE::Options.new(require_window_focus: true)
229229

230230
WebDriver::Driver.for :ie, opt
231231
end

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ module Chrome
105105

106106
it 'takes desired capabilities' do
107107
expect(http).to receive(:call) do |_, _, payload|
108-
expect(payload[:desiredCapabilities][:chrome_options]).to include('foo' => 'bar')
108+
expect(payload[:capabilities][:firstMatch][0][:chrome_options]).to include('foo' => 'bar')
109109
resp
110110
end
111111

@@ -118,7 +118,7 @@ module Chrome
118118

119119
it 'lets direct arguments take precedence over capabilities' do
120120
expect(http).to receive(:call) do |_, _, payload|
121-
expect(payload[:desiredCapabilities]['goog:chromeOptions'][:args]).to eq(driver_args)
121+
expect(payload[:capabilities][:firstMatch][0]['goog:chromeOptions'][:args]).to eq(driver_args)
122122
resp
123123
end
124124

@@ -131,7 +131,7 @@ module Chrome
131131

132132
it 'does not merge empty options' do
133133
expect(http).to receive(:call) do |_, _, payload|
134-
expect(payload[:desiredCapabilities]['goog:chromeOptions'][:args]).to eq(%w[foo bar])
134+
expect(payload[:capabilities][:firstMatch][0]['goog:chromeOptions'][:args]).to eq(%w[foo bar])
135135
resp
136136
end
137137

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

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -38,57 +38,17 @@ module IE
3838
expect { Driver.new(foo: 'bar') }.to raise_error(ArgumentError)
3939
end
4040

41-
it 'accepts the :introduce_flakiness_by_ignoring_security_domains option' do
42-
Driver.new(
43-
introduce_flakiness_by_ignoring_security_domains: true,
44-
http_client: http
45-
)
46-
47-
expect(caps[:ignore_protected_mode_settings]).to be true
48-
end
49-
50-
it 'has native events enabled by default' do
51-
Driver.new(http_client: http)
52-
53-
expect(caps[:native_events]).to be true
54-
end
55-
56-
it 'can disable native events' do
57-
Driver.new(
58-
native_events: false,
59-
http_client: http
60-
)
61-
62-
expect(caps[:native_events]).to be false
63-
end
64-
6541
it 'takes desired capabilities' do
6642
custom_caps = Remote::Capabilities.new
6743
custom_caps['ignoreProtectedModeSettings'] = true
6844

6945
expect(http).to receive(:call) do |_, _, payload|
70-
expect(payload[:desiredCapabilities]['ignoreProtectedModeSettings']).to be true
46+
expect(payload[:capabilities][:firstMatch][0]['ignoreProtectedModeSettings']).to be true
7147
resp
7248
end
7349

7450
Driver.new(http_client: http, desired_capabilities: custom_caps)
7551
end
76-
77-
it 'can override desired capabilities through direct arguments' do
78-
custom_caps = Remote::Capabilities.new
79-
custom_caps['ignoreProtectedModeSettings'] = false
80-
81-
expect(http).to receive(:call) do |_, _, payload|
82-
expect(payload[:desiredCapabilities][:ignore_protected_mode_settings]).to be true
83-
resp
84-
end
85-
86-
Driver.new(
87-
http_client: http,
88-
desired_capabilities: custom_caps,
89-
introduce_flakiness_by_ignoring_security_domains: true
90-
)
91-
end
9252
end
9353
end # IE
9454
end # WebDriver

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ module IE
8181
expect(opt.initial_browser_url).to eq('http://google.com')
8282
end
8383

84+
it 'has native events on by default' do
85+
expect(options.native_events).to eq(true)
86+
end
87+
8488
it 'sets passed native_events' do
8589
opt = Options.new(native_events: false)
8690
expect(opt.native_events).to eq(false)

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,12 @@ module Remote
3232
describe '#create_session' do
3333
let(:http) { WebDriver::Remote::Http::Default.new }
3434

35-
it 'sends merged capabilities' do
35+
it 'sends plain capabilities' do
3636
payload = JSON.generate(
37-
desiredCapabilities: {
38-
browserName: 'internet explorer',
39-
platform: 'WINDOWS'
40-
},
4137
capabilities: {
4238
firstMatch: [{
43-
browserName: 'internet explorer'
39+
browserName: 'internet explorer',
40+
platformName: 'windows'
4441
}]
4542
}
4643
)
@@ -52,9 +49,8 @@ module Remote
5249
Bridge.new(http_client: http).create_session(Capabilities.ie)
5350
end
5451

55-
it 'passes Chrome options as capabilities' do
52+
it 'passes options as capabilities' do
5653
payload = JSON.generate(
57-
desiredCapabilities: {},
5854
capabilities: {
5955
firstMatch: [{
6056
'goog:chromeOptions' => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ module Safari
4646
custom_caps['foo'] = 'bar'
4747

4848
expect(http).to receive(:call) do |_, _, payload|
49-
expect(payload[:desiredCapabilities]['foo']).to eq 'bar'
49+
expect(payload[:capabilities][:firstMatch][0]['foo']).to eq 'bar'
5050
resp
5151
end
5252

0 commit comments

Comments
 (0)