diff --git a/rb/lib/selenium/webdriver/chrome/driver.rb b/rb/lib/selenium/webdriver/chrome/driver.rb index 46a0b1e321a91..fa9f6974d53e6 100644 --- a/rb/lib/selenium/webdriver/chrome/driver.rb +++ b/rb/lib/selenium/webdriver/chrome/driver.rb @@ -31,8 +31,9 @@ class Driver < Chromium::Driver include LocalDriver def initialize(options: nil, service: nil, url: nil, **opts) - caps, url = initialize_local_driver(options, service, url) - super(caps: caps, url: url, **opts) + initialize_local_driver(options, service, url) do |caps, driver_url| + super(caps: caps, url: driver_url, **opts) + end end def browser diff --git a/rb/lib/selenium/webdriver/common/driver.rb b/rb/lib/selenium/webdriver/common/driver.rb index ed911cb275f45..83a21f26061c1 100644 --- a/rb/lib/selenium/webdriver/common/driver.rb +++ b/rb/lib/selenium/webdriver/common/driver.rb @@ -326,11 +326,6 @@ def create_bridge(caps:, url:, http_client: nil) end end - def service_url(service) - @service_manager = service.launch - @service_manager.uri - end - def screenshot bridge.screenshot end diff --git a/rb/lib/selenium/webdriver/common/local_driver.rb b/rb/lib/selenium/webdriver/common/local_driver.rb index 0e20ca01d8ecc..1c4b993b33295 100644 --- a/rb/lib/selenium/webdriver/common/local_driver.rb +++ b/rb/lib/selenium/webdriver/common/local_driver.rb @@ -27,7 +27,17 @@ def initialize_local_driver(options, service, url) caps = process_options(options, service) url = service_url(service) - [caps, url] + begin + yield(caps, url) if block_given? + rescue Selenium::WebDriver::Error::WebDriverError + @service_manager&.stop + raise + end + end + + def service_url(service) + @service_manager = service.launch + @service_manager.uri end def process_options(options, service) diff --git a/rb/lib/selenium/webdriver/edge/driver.rb b/rb/lib/selenium/webdriver/edge/driver.rb index 7ab091b9d5f6f..44096cfbcd565 100644 --- a/rb/lib/selenium/webdriver/edge/driver.rb +++ b/rb/lib/selenium/webdriver/edge/driver.rb @@ -31,8 +31,9 @@ class Driver < Chromium::Driver include LocalDriver def initialize(options: nil, service: nil, url: nil, **opts) - caps, url = initialize_local_driver(options, service, url) - super(caps: caps, url: url, **opts) + initialize_local_driver(options, service, url) do |caps, driver_url| + super(caps: caps, url: driver_url, **opts) + end end def browser diff --git a/rb/lib/selenium/webdriver/firefox/driver.rb b/rb/lib/selenium/webdriver/firefox/driver.rb index 704eadd060e93..76f6f0a27bda9 100644 --- a/rb/lib/selenium/webdriver/firefox/driver.rb +++ b/rb/lib/selenium/webdriver/firefox/driver.rb @@ -37,8 +37,9 @@ class Driver < WebDriver::Driver include LocalDriver def initialize(options: nil, service: nil, url: nil, **opts) - caps, url = initialize_local_driver(options, service, url) - super(caps: caps, url: url, **opts) + initialize_local_driver(options, service, url) do |caps, driver_url| + super(caps: caps, url: driver_url, **opts) + end end def browser diff --git a/rb/lib/selenium/webdriver/ie/driver.rb b/rb/lib/selenium/webdriver/ie/driver.rb index 7a980c64fbdc3..688cb00b87b8d 100644 --- a/rb/lib/selenium/webdriver/ie/driver.rb +++ b/rb/lib/selenium/webdriver/ie/driver.rb @@ -32,8 +32,9 @@ class Driver < WebDriver::Driver include LocalDriver def initialize(options: nil, service: nil, url: nil, **opts) - caps, url = initialize_local_driver(options, service, url) - super(caps: caps, url: url, **opts) + initialize_local_driver(options, service, url) do |caps, driver_url| + super(caps: caps, url: driver_url, **opts) + end end def browser diff --git a/rb/lib/selenium/webdriver/safari/driver.rb b/rb/lib/selenium/webdriver/safari/driver.rb index 2944f654328df..d59b91c640fdf 100644 --- a/rb/lib/selenium/webdriver/safari/driver.rb +++ b/rb/lib/selenium/webdriver/safari/driver.rb @@ -32,8 +32,9 @@ class Driver < WebDriver::Driver include LocalDriver def initialize(options: nil, service: nil, url: nil, **opts) - caps, url = initialize_local_driver(options, service, url) - super(caps: caps, url: url, **opts) + initialize_local_driver(options, service, url) do |caps, driver_url| + super(caps: caps, url: driver_url, **opts) + end end def browser