Skip to content

Commit a81b559

Browse files
committed
rb - firefox defaults to geckodriver
1 parent a871037 commit a81b559

11 files changed

Lines changed: 97 additions & 98 deletions

File tree

rb/lib/selenium/webdriver/firefox.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def self.driver_path=(path)
5454

5555
def self.driver_path
5656
@driver_path ||= begin
57-
path = Platform.find_binary('geckodriver*') || Platform.find_binary('wires*')
57+
path = Platform.find_binary('geckodriver*')
5858
raise Error::WebDriverError, MISSING_TEXT unless path
5959
Platform.assert_executable path
6060

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def get(url)
135135
execute :get, {}, {url: url}
136136
end
137137

138-
def capabilities
138+
def session_capabilities
139139
Capabilities.json_create execute(:getCapabilities)
140140
end
141141

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def edge(opts = {})
8484
end
8585

8686
def firefox(opts = {})
87-
return W3CCapabilities.firefox(opts) if opts[:marionette]
87+
return W3CCapabilities.firefox(opts) unless opts[:marionette] == false
8888

8989
new({
9090
browser_name: 'firefox',

rb/lib/selenium/webdriver/remote/w3c_capabilities.rb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,13 @@ def firefox(opts = {})
7979
opts[:browser_version] = opts.delete :version
8080
opts[:platform_name] = opts.delete :platform
8181

82-
new({
83-
browser_name: 'firefox',
84-
marionette: true
85-
}.merge(opts))
82+
new({browser_name: 'firefox'}.merge(opts))
8683
end
8784

8885
alias_method :ff, :firefox
8986

9087
def w3c?(opts = {})
91-
opts[:desired_capabilities].is_a?(W3CCapabilities) || opts[:marionette]
88+
!opts[:desired_capabilities].is_a?(Capabilities)
9289
end
9390

9491
#

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

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,30 @@ module Firefox
2525
compliant_on browser: :firefox do
2626
describe Driver do
2727
describe '.new' do
28+
before do
29+
@opt = {}
30+
@opt[:url] = GlobalTestEnv.remote_server.webdriver_url if GlobalTestEnv.driver == :remote
31+
end
32+
2833
it 'takes a binary path as an argument' do
2934
pending "Set ENV['ALT_FIREFOX_BINARY'] to test this" unless ENV['ALT_FIREFOX_BINARY']
3035

3136
begin
3237
default_path = Firefox::Binary.path
3338

34-
driver1 = Selenium::WebDriver.for :firefox
39+
caps1 = Remote::Capabilities.firefox(marionette: false)
40+
@opt[:desired_capabilities] = caps1
41+
42+
driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
3543
default_version = driver1.capabilities[:version]
3644
driver1.quit
3745

38-
caps = Remote::Capabilities.firefox(firefox_binary: ENV['ALT_FIREFOX_BINARY'])
39-
driver2 = Selenium::WebDriver.for :firefox, desired_capabilities: caps
46+
caps2 = Remote::Capabilities.firefox(
47+
firefox_binary: ENV['ALT_FIREFOX_BINARY'],
48+
marionette: false
49+
)
50+
@opt[:desired_capabilities] = caps2
51+
driver2 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
4052

4153
expect(driver2.capabilities[:version]).to_not be == default_version
4254
driver2.quit
@@ -45,16 +57,21 @@ module Firefox
4557
end
4658
end
4759

48-
it 'takes a Firefox::Profile instance as argument' do
49-
begin
50-
profile = Selenium::WebDriver::Firefox::Profile.new
51-
driver = Selenium::WebDriver.for :firefox, profile: profile
52-
stored_profile = driver.instance_variable_get('@bridge')
53-
.instance_variable_get('@launcher')
54-
.instance_variable_get('@profile')
55-
expect(stored_profile).to be == profile
56-
ensure
57-
driver.quit if driver
60+
not_compliant_on driver: :remote do
61+
it 'takes a Firefox::Profile instance as argument' do
62+
begin
63+
@opt[:desired_capabilities] = Remote::Capabilities.firefox(marionette: false)
64+
profile = Selenium::WebDriver::Firefox::Profile.new
65+
@opt[:profile] = profile
66+
driver2 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
67+
68+
stored_profile = driver2.instance_variable_get('@bridge')
69+
.instance_variable_get('@launcher')
70+
.instance_variable_get('@profile')
71+
expect(stored_profile).to be == profile
72+
ensure
73+
driver2.quit if driver2
74+
end
5875
end
5976
end
6077
end

rb/spec/integration/selenium/webdriver/firefox/marionette_spec.rb

Lines changed: 29 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,30 @@
2121

2222
module Selenium
2323
module WebDriver
24-
describe Firefox do
25-
def restart_remote_server
26-
server = GlobalTestEnv.reset_remote_server
27-
server.start
28-
server.webdriver_url
29-
end
24+
compliant_on browser: :marionette do
25+
describe Firefox do
26+
def restart_remote_server
27+
server = GlobalTestEnv.reset_remote_server
28+
server.start
29+
server.webdriver_url
30+
end
3031

31-
before(:all) do
32-
driver
33-
quit_driver
34-
end
32+
before(:all) do
33+
driver
34+
quit_driver
35+
end
3536

36-
before do
37-
@opt = {}
38-
@opt[:url] = restart_remote_server if GlobalTestEnv.driver == :remote
39-
end
37+
before(:each) do
38+
@opt = {}
39+
@opt[:url] = restart_remote_server if GlobalTestEnv.driver == :remote
40+
end
4041

41-
compliant_on browser: :marionette do
4242
it 'creates default capabilities' do
43+
driver_name = GlobalTestEnv.driver
44+
driver_name = :firefox if driver_name == :marionette
45+
4346
begin
44-
@opt[:marionette] = true
45-
driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
47+
driver1 = Selenium::WebDriver.for driver_name, @opt
4648
expect(driver1.capabilities.browser_version).to match(/^\d\d\./)
4749
expect(driver1.capabilities.platform_name).to_not be_nil
4850
expect(driver1.capabilities.platform_version).to_not be_nil
@@ -85,47 +87,26 @@ def restart_remote_server
8587
end
8688
end
8789
end
88-
end
8990

90-
compliant_on browser: :marionette do
91-
it 'Uses geckodriver when setting marionette option in capabilities' do
92-
caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: true)
93-
@opt[:desired_capabilities] = caps
94-
expect { @driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt }.to_not raise_exception
95-
@driver1.quit
96-
end
97-
98-
compliant_on browser: :marionette do
99-
# This passes in isolation, but can not run in suite due to combination of
100-
# https://bugzilla.mozilla.org/show_bug.cgi?id=1228107 & https://github.com/SeleniumHQ/selenium/issues/1150
101-
it 'Uses Wires when setting marionette option in driver initialization' do
102-
@opt[:marionette] = true
103-
driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
104-
105-
expect(driver1.capabilities[:browser_version]).to_not be_nil
106-
driver1.quit
91+
# https://github.com/mozilla/geckodriver/issues/58
92+
not_compliant_on browser: :marionette do
93+
context 'when shared example' do
94+
it_behaves_like 'driver that can be started concurrently', :marionette
10795
end
10896
end
10997

110-
# test with firefox due to https://bugzilla.mozilla.org/show_bug.cgi?id=1228121
111-
compliant_on browser: :firefox do
112-
it 'Does not use geckodriver when marionette option is not set' do
98+
# Test in isolation: https://bugzilla.mozilla.org/show_bug.cgi?id=1228121
99+
not_compliant_on browser: :marionette do
100+
it 'Does not use geckodriver when marionette option is set to false' do
101+
caps = Remote::Capabilities.firefox(marionette: false)
102+
@opt[:desired_capabilities] = caps
103+
113104
driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
114105

115106
expect { driver1.capabilities.browser_version }.to raise_exception NoMethodError
116107
driver1.quit
117108
end
118109
end
119-
120-
compliant_on driver: :marionette do
121-
# https://github.com/mozilla/geckodriver/issues/58
122-
not_compliant_on driver: :marionette do
123-
context 'when shared example' do
124-
before { driver }
125-
it_behaves_like 'driver that can be started concurrently', :marionette
126-
end
127-
end
128-
end
129110
end
130111
end
131112
end # WebDriver

rb/spec/integration/selenium/webdriver/firefox/profile_spec.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,11 @@ def read_generated_prefs(from = nil)
145145
profile['browser.startup.homepage'] = url_for('formPage.html')
146146

147147
begin
148-
driver_one = WebDriver.for(:firefox, profile: profile)
149-
driver_two = WebDriver.for(:firefox, profile: profile)
148+
opt = {desired_capabilities: Remote::Capabilities.firefox(marionette: false),
149+
profile: profile}
150+
151+
driver_one = WebDriver.for(:firefox, opt.dup)
152+
driver_two = WebDriver.for(:firefox, opt.dup)
150153
ensure
151154
driver_one.quit if driver_one
152155
driver_two.quit if driver_two

rb/spec/integration/selenium/webdriver/spec_support/shared_examples/concurrent_driver.rb

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919

2020
shared_examples_for 'driver that can be started concurrently' do |browser_name|
2121
it 'is started sequentially' do
22+
marionette = browser_name == :firefox ? {marionette: false} : {}
23+
browser_name = :firefox if browser_name == :marionette
24+
2225
expect do
2326
# start 5 drivers concurrently
2427
threads = []
@@ -27,13 +30,18 @@
2730
opt = {}
2831
if GlobalTestEnv.remote_server?
2932
opt[:url] = GlobalTestEnv.remote_server.webdriver_url
30-
opt[:desired_capabilities] = WebDriver::Remote::Capabilities.send(browser_name)
3133
end
32-
opt[:marionette] = true if browser_name == :marionette
34+
35+
caps = if browser_name == :firefox
36+
WebDriver::Remote::Capabilities.firefox(marionette)
37+
else
38+
WebDriver::Remote::Capabilities.send(browser_name)
39+
end
40+
opt[:desired_capabilities] = caps
3341

3442
5.times do
3543
threads << Thread.new do
36-
drivers << Selenium::WebDriver.for(GlobalTestEnv.driver, opt)
44+
drivers << Selenium::WebDriver.for(GlobalTestEnv.driver, opt.dup)
3745
end
3846
end
3947

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

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,8 @@ def root
133133
private
134134

135135
def create_driver
136-
instance = if driver == :marionette
137-
create_firefox_driver(true)
138-
else
139-
method = "create_#{driver}_driver"
140-
defined?(method) ? send(method) : WebDriver::Driver.for(driver)
141-
end
136+
method = "create_#{driver}_driver"
137+
instance = defined?(method) ? send(method) : WebDriver::Driver.for(driver)
142138

143139
@create_driver_error_count -= 1 unless @create_driver_error_count == 0
144140
instance
@@ -149,15 +145,15 @@ def create_driver
149145
end
150146

151147
def remote_capabilities
152-
if browser == :marionette
153-
caps = WebDriver::Remote::Capabilities.firefox(marionette: true)
154-
else
155-
caps = WebDriver::Remote::Capabilities.send(browser)
148+
opt = {}
149+
browser_name = browser == :marionette ? :firefox : browser
150+
opt[:marionette] = false if browser == :firefox
151+
152+
caps = WebDriver::Remote::Capabilities.send(browser_name, opt)
156153

157-
unless caps.is_a? WebDriver::Remote::W3CCapabilities
158-
caps.javascript_enabled = true
159-
caps.css_selectors_enabled = true
160-
end
154+
unless caps.is_a? WebDriver::Remote::W3CCapabilities
155+
caps.javascript_enabled = true
156+
caps.css_selectors_enabled = true
161157
end
162158

163159
caps
@@ -187,16 +183,15 @@ def create_remote_driver
187183
end
188184

189185
def create_firefox_driver(marionette = false)
190-
opt = marionette ? {marionette: true} : {}
191-
binary = ENV['FIREFOX_BINARY']
192-
WebDriver::Firefox.path = binary if binary
186+
opt = marionette ? {} : {marionette: false}
187+
caps = WebDriver::Remote::Capabilities.firefox(opt)
188+
WebDriver::Firefox.path = ENV['FIREFOX_BINARY'] if ENV['FIREFOX_BINARY']
193189

194-
WebDriver::Driver.for :firefox, opt
190+
WebDriver::Driver.for :firefox, desired_capabilities: caps
195191
end
196192

197-
def create_edge_driver
198-
caps = WebDriver::Remote::W3CCapabilities.edge
199-
WebDriver.for :edge, desired_capabilities: caps
193+
def create_marionette_driver
194+
create_firefox_driver(true)
200195
end
201196

202197
def create_chrome_driver

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module Firefox
2626
let(:launcher) { double(Launcher, launch: nil, url: 'http://localhost:4444/wd/hub') }
2727
let(:resp) { {'sessionId' => 'foo', 'value' => @default_capabilities} }
2828
let(:http) { double(Remote::Http::Default, call: resp).as_null_object }
29-
let(:caps) { {} }
29+
let(:caps) { Remote::Capabilities.chrome }
3030

3131
before do
3232
@default_capabilities = Remote::Capabilities.firefox.as_json

0 commit comments

Comments
 (0)