Skip to content

Commit 6d52426

Browse files
committed
rb - implement :service_args parameter for all drivers to pass in command line switches
1 parent 24ce572 commit 6d52426

File tree

7 files changed

+108
-31
lines changed

7 files changed

+108
-31
lines changed

rb/build.desc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ ruby_library(name = "edge",
7373
"lib/selenium/webdriver/edge/**/*.rb",
7474
"lib/selenium/webdriver/edge.rb"
7575
],
76+
resources = [
77+
{ "//javascript/webdriver/atoms:getAttribute": "rb/lib/selenium/webdriver/atoms/getAttribute.js"}
78+
],
7679
deps = [":common"]
7780
)
7881

rb/lib/selenium/webdriver/chrome/bridge.rb

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ module Chrome
2424
class Bridge < Remote::Bridge
2525
def initialize(opts = {})
2626
port = opts.delete(:port) || Service::DEFAULT_PORT
27+
service_args = opts.delete(:service_args) || {}
28+
if opts[:service_log_path]
29+
service_args.merge!(service_log_path: opts.delete(:service_log_path))
30+
end
31+
2732
unless opts.key?(:url)
28-
@service = Service.new(Chrome.driver_path, port, *extract_service_args(opts))
33+
@service = Service.new(Chrome.driver_path, port, *extract_service_args(service_args))
2934
@service.start
3035
opts[:url] = @service.uri
3136
end
@@ -83,10 +88,15 @@ def create_capabilities(opts)
8388
caps
8489
end
8590

86-
def extract_service_args(opts)
87-
args = []
88-
args << "--log-path=#{opts.delete(:service_log_path)}" if opts.key?(:service_log_path)
89-
args
91+
def extract_service_args(args)
92+
service_args = []
93+
service_args << "--log-path=#{args.delete(:service_log_path)}" if args.key?(:service_log_path)
94+
service_args << "--url-base=#{args.delete(:url_base)}" if args.key?(:url_base)
95+
service_args << "--port-server=#{args.delete(:port_server)}" if args.key?(:port_server)
96+
service_args << "--whitelisted-ips=#{args.delete(:whitelisted_ips)}" if args.key?(:whitelisted_ips)
97+
service_args << "--verbose=#{args.delete(:verbose)}" if args.key?(:whitelisted_ips)
98+
service_args << "--silent=#{args.delete(:silent)}" if args.key?(:whitelisted_ips)
99+
service_args
90100
end
91101
end # Bridge
92102
end # Chrome

rb/lib/selenium/webdriver/edge/bridge.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ module Edge
2727
class Bridge < Remote::W3CBridge
2828
def initialize(opts = {})
2929
port = opts.delete(:port) || Service::DEFAULT_PORT
30+
service_args = opts.delete(:service_args) || {}
3031
unless opts.key?(:url)
31-
@service = Service.new(Edge.driver_path, port)
32+
@service = Service.new(Edge.driver_path, port, *extract_service_args(service_args))
3233
@service.host = 'localhost' if @service.host == '127.0.0.1'
3334
@service.start
3435
opts[:url] = @service.uri
@@ -60,6 +61,15 @@ def quit
6061
@service.stop if @service
6162
end
6263

64+
private
65+
66+
def extract_service_args(args = {})
67+
service_args = []
68+
service_args << "–host=#{args[:host]}" if args.key? :host
69+
service_args << "–package=#{args[:package]}" if args.key? :package
70+
service_args << "-verbose" if args[:verbose] == true
71+
service_args
72+
end
6373
end # Bridge
6474
end # Edge
6575
end # WebDriver

rb/lib/selenium/webdriver/firefox/w3c_bridge.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ class W3CBridge < Remote::W3CBridge
2525
def initialize(opts = {})
2626
port = opts.delete(:port) || Service::DEFAULT_PORT
2727
opts[:desired_capabilities] = create_capabilities(opts)
28+
service_args = opts.delete(:service_args) || {}
2829

29-
@service = Service.new(Firefox.driver_path, port)
30+
@service = Service.new(Firefox.driver_path, port, *extract_service_args(service_args))
3031
@service.start
3132
opts[:url] = @service.uri
3233

@@ -61,6 +62,17 @@ def create_capabilities(opts)
6162
Binary.path = caps[:firefox_options][:binary] if caps[:firefox_options].key?(:binary)
6263
caps
6364
end
65+
66+
def extract_service_args(args = {})
67+
service_args = []
68+
service_args << "--binary=#{args[:binary]}" if args.key?(:binary)
69+
service_args << "–-log=#{args[:log]}" if args.key?(:log)
70+
service_args << "–-marionette-port=#{args[:marionette_port]}" if args.key?(:marionette_port)
71+
service_args << "–-host=#{args[:host]}" if args.key?(:host)
72+
service_args << "–-port=#{args[:port]}" if args.key?(:port)
73+
service_args
74+
end
75+
6476
end # W3CBridge
6577
end # Firefox
6678
end # WebDriver

rb/lib/selenium/webdriver/ie/bridge.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ module IE
2727
class Bridge < Remote::Bridge
2828
def initialize(opts = {})
2929
port = opts.delete(:port) || Service::DEFAULT_PORT
30-
31-
@service = Service.new(IE.driver_path, port, *extract_service_args(opts))
30+
service_args = opts.delete(:service_args) || {}
31+
service_args = match_legacy(opts, service_args)
32+
@service = Service.new(IE.driver_path, port, *extract_service_args(service_args))
3233
@service.start
3334
opts[:url] = @service.uri
3435

@@ -55,13 +56,20 @@ def quit
5556

5657
private
5758

58-
def extract_service_args(opts)
59-
args = []
60-
args << "--log-level=#{opts.delete(:log_level).to_s.upcase}" if opts[:log_level]
61-
args << "--log-file=#{opts.delete(:log_file)}" if opts[:log_file]
62-
args << "--implementation=#{opts.delete(:implementation).to_s.upcase}" if opts[:implementation]
59+
def match_legacy(opts, args)
60+
args[:log_level] = opts.delete(:log_level) if opts.key?(:log_level)
61+
args[:log_file] = opts.delete(:log_file) if opts.key?(:log_file)
62+
args[:implementation] = opts.delete(:implementation) if opts.key?(:implementation)
6363
args
6464
end
65+
66+
def extract_service_args(args)
67+
service_args = []
68+
service_args << "--log-level=#{args.delete(:log_level).to_s.upcase}" if args.key?(:log_level)
69+
service_args << "--log-file=#{args.delete(:log_file)}" if args.key?(:log_file)
70+
service_args << "--implementation=#{args.delete(:implementation).to_s.upcase}" if args.key?(:implementation)
71+
service_args
72+
end
6573
end # Bridge
6674
end # IE
6775
end # WebDriver

rb/lib/selenium/webdriver/safari/apple_bridge.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ module Safari
2323
# @api private
2424
class AppleBridge < Remote::Bridge
2525
def initialize(opts = {})
26-
port = opts.delete(:port) || Service::DEFAULT_PORT
2726
opts[:desired_capabilities] ||= Remote::Capabilities.safari
27+
port = opts.delete(:port) || Service::DEFAULT_PORT
28+
service_args = opts.delete(:service_args) || {}
2829

29-
@service = Service.new(Safari.driver_path, port, *extract_service_args(opts))
30+
@service = Service.new(Safari.driver_path, port, *extract_service_args(service_args))
3031
@service.start
3132
opts[:url] = @service.uri
3233

@@ -38,6 +39,12 @@ def quit
3839
ensure
3940
@service.stop if @service
4041
end
42+
43+
private
44+
45+
def extract_service_args(args = {})
46+
["–host=#{args[:port]}"] if args.key? :port
47+
end
4148
end # AppleBridge
4249
end # Safari
4350
end # WebDriver

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

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,25 +63,52 @@ def restart_remote_server
6363
end
6464
end
6565

66-
it 'takes a binary path as an argument' do
67-
pending "Set ENV['ALT_FIREFOX_BINARY'] to test this" unless ENV['ALT_FIREFOX_BINARY']
68-
begin
69-
driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt.dup
66+
# Remote needs to implement firefox options
67+
not_compliant_on driver: :remote do
68+
it 'takes a binary path as an argument' do
69+
pending "Set ENV['ALT_FIREFOX_BINARY'] to test this" unless ENV['ALT_FIREFOX_BINARY']
70+
begin
71+
driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt.dup
7072

71-
default_version = driver1.capabilities.version
72-
expect { driver1.capabilities.browser_version }.to_not raise_exception NoMethodError
73-
driver1.quit
73+
default_version = driver1.capabilities.version
74+
expect { driver1.capabilities.browser_version }.to_not raise_exception NoMethodError
75+
driver1.quit
7476

75-
caps = Remote::Capabilities.firefox(firefox_options: {binary: ENV['ALT_FIREFOX_BINARY']})
76-
@opt[:desired_capabilities] = caps
77-
driver2 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
77+
caps = Remote::Capabilities.firefox(firefox_options: {binary: ENV['ALT_FIREFOX_BINARY']})
78+
@opt[:desired_capabilities] = caps
79+
driver2 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
80+
81+
expect(driver2.capabilities.version).to_not eql(default_version)
82+
expect { driver2.capabilities.browser_version }.to_not raise_exception NoMethodError
83+
driver2.quit
84+
ensure
85+
Firefox::Binary.reset_path!
86+
end
87+
end
88+
89+
it 'gives precedence to firefox options versus argument switch' do
90+
pending "Set ENV['ALT_FIREFOX_BINARY'] to test this" unless ENV['ALT_FIREFOX_BINARY']
91+
begin
92+
driver1 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt.dup
93+
94+
default_path = Firefox::Binary.path
95+
default_version = driver1.capabilities.version
96+
driver1.quit
97+
98+
caps = Remote::Capabilities.firefox(firefox_options: {binary: ENV['ALT_FIREFOX_BINARY']},
99+
service_args: {binary: default_path})
100+
@opt[:desired_capabilities] = caps
101+
driver2 = Selenium::WebDriver.for GlobalTestEnv.driver, @opt
102+
103+
expect(driver2.capabilities.version).to_not eql(default_version)
104+
expect { driver2.capabilities.browser_version }.to_not raise_exception NoMethodError
105+
driver2.quit
106+
ensure
107+
Firefox::Binary.reset_path!
108+
end
78109

79-
expect(driver2.capabilities.version).to_not eql(default_version)
80-
expect { driver2.capabilities.browser_version }.to_not raise_exception NoMethodError
81-
driver2.quit
82-
ensure
83-
Firefox::Binary.reset_path!
84110
end
111+
85112
end
86113

87114
# https://github.com/mozilla/geckodriver/issues/58

0 commit comments

Comments
 (0)