From 60273d796607764ffdde27d42332e30697594458 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 19 Jul 2024 15:01:29 -0500 Subject: [PATCH 1/6] [rb] create user-friendly method for enabling bidi --- rb/lib/selenium/webdriver/common/options.rb | 8 ++++++++ .../selenium/webdriver/chrome/options_spec.rb | 18 ++++++++++++++++++ .../selenium/webdriver/chrome/options_spec.rb | 12 ++++++++++++ 3 files changed, 38 insertions(+) diff --git a/rb/lib/selenium/webdriver/common/options.rb b/rb/lib/selenium/webdriver/common/options.rb index 4170a7c9e7ce1..a9fc469a39020 100644 --- a/rb/lib/selenium/webdriver/common/options.rb +++ b/rb/lib/selenium/webdriver/common/options.rb @@ -91,6 +91,14 @@ def add_option(name, value = nil) @options[name] = value end + def enable_bidi! + @options[:web_socket_url] = true + end + + def bidi? + !!@options[:web_socket_url] + end + def ==(other) return false unless other.is_a? self.class diff --git a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb index b1919c9a909da..1cd9c68dbcfe2 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb @@ -43,6 +43,24 @@ module Chrome expect(ua).to eq('foo;bar') end end + + it 'enables bidi' do + quit_driver + + options = Selenium::WebDriver::Options.chrome + expect(options.web_socket_url).to be_nil + expect(options.bidi?).to be false + + options.enable_bidi! + expect(options.web_socket_url).to be true + expect(options.bidi?).to be true + + driver = Selenium::WebDriver.for :chrome, options: options + + expect(driver.capabilities.web_socket_url).to be_a String + + driver.quit + end end end # Chrome end # WebDriver diff --git a/rb/spec/unit/selenium/webdriver/chrome/options_spec.rb b/rb/spec/unit/selenium/webdriver/chrome/options_spec.rb index a87f073e50087..f638328dcf770 100644 --- a/rb/spec/unit/selenium/webdriver/chrome/options_spec.rb +++ b/rb/spec/unit/selenium/webdriver/chrome/options_spec.rb @@ -141,6 +141,18 @@ module Chrome end end + describe '#enable_bidi!' do + it 'allows setting and querying bidi' do + expect(options.web_socket_url).to be_nil + expect(options.bidi?).to be false + + options.enable_bidi! + + expect(options.bidi?).to be true + expect(options.web_socket_url).to be true + end + end + describe '#add_extension' do it 'adds an extension' do allow(File).to receive(:file?).and_return(true) From 9536d33eca4c644288abfc72835596c9b488a229 Mon Sep 17 00:00:00 2001 From: aguspe Date: Sun, 17 Nov 2024 21:06:40 +0100 Subject: [PATCH 2/6] Add type support --- rb/sig/lib/selenium/webdriver/common/options.rbs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rb/sig/lib/selenium/webdriver/common/options.rbs b/rb/sig/lib/selenium/webdriver/common/options.rbs index d2fe0ccd30b20..b49c13380b71a 100644 --- a/rb/sig/lib/selenium/webdriver/common/options.rbs +++ b/rb/sig/lib/selenium/webdriver/common/options.rbs @@ -39,6 +39,10 @@ module Selenium def ==: (untyped other) -> bool + def bidi?: -> bool + + def enable_bidi!: -> bool + alias eql? == def as_json: (*untyped) -> untyped From 82485a993f0461a24a60c20e64804d5f2610e13d Mon Sep 17 00:00:00 2001 From: aguspe Date: Mon, 18 Nov 2024 19:37:39 +0100 Subject: [PATCH 3/6] Add support for bidi as an initialization parameter --- rb/lib/selenium/webdriver/common/options.rb | 2 ++ .../selenium/webdriver/chrome/options_spec.rb | 14 ++++++++ .../selenium/webdriver/edge/options_spec.rb | 32 +++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/rb/lib/selenium/webdriver/common/options.rb b/rb/lib/selenium/webdriver/common/options.rb index a9fc469a39020..63e51ad60b8d9 100644 --- a/rb/lib/selenium/webdriver/common/options.rb +++ b/rb/lib/selenium/webdriver/common/options.rb @@ -71,6 +71,8 @@ def set_capabilities def initialize(**opts) self.class.set_capabilities + opts[:web_socket_url] = opts.delete(:bidi) if opts.key?(:bidi) + @options = opts @options[:browser_name] = self.class::BROWSER end diff --git a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb index 1cd9c68dbcfe2..945ca08bc991c 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb @@ -61,6 +61,20 @@ module Chrome driver.quit end + + it 'enables BiDi on initialization' do + quit_driver + + options = Selenium::WebDriver::Options.chrome(bidi: true) + expect(options.web_socket_url).to be true + expect(options.bidi?).to be true + + driver = Selenium::WebDriver.for :chrome, options: options + + expect(driver.capabilities.web_socket_url).to be_a String + + driver.quit + end end end # Chrome end # WebDriver diff --git a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb index a6c6cacbaaeb2..1b7bd08bb2113 100644 --- a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb @@ -43,6 +43,38 @@ module Edge expect(ua).to eq('foo;bar') end end + + it 'enables bidi' do + quit_driver + + options = Selenium::WebDriver::Options.chrome + expect(options.web_socket_url).to be_nil + expect(options.bidi?).to be false + + options.enable_bidi! + expect(options.web_socket_url).to be true + expect(options.bidi?).to be true + + driver = Selenium::WebDriver.for :chrome, options: options + + expect(driver.capabilities.web_socket_url).to be_a String + + driver.quit + end + + it 'enables BiDi on initialization' do + quit_driver + + options = Selenium::WebDriver::Options.chrome(bidi: true) + expect(options.web_socket_url).to be true + expect(options.bidi?).to be true + + driver = Selenium::WebDriver.for :chrome, options: options + + expect(driver.capabilities.web_socket_url).to be_a String + + driver.quit + end end end # Edge end # WebDriver From 2c0d2fe5fea8cd77169463032df9a6ad6b051eab Mon Sep 17 00:00:00 2001 From: aguspe Date: Tue, 19 Nov 2024 19:14:55 +0100 Subject: [PATCH 4/6] Update test --- rb/spec/integration/selenium/webdriver/edge/options_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb index 1b7bd08bb2113..e49592d0d82fa 100644 --- a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb @@ -65,11 +65,11 @@ module Edge it 'enables BiDi on initialization' do quit_driver - options = Selenium::WebDriver::Options.chrome(bidi: true) + options = Selenium::WebDriver::Options.edge(bidi: true) expect(options.web_socket_url).to be true expect(options.bidi?).to be true - driver = Selenium::WebDriver.for :chrome, options: options + driver = Selenium::WebDriver.for :edge, options: options expect(driver.capabilities.web_socket_url).to be_a String From 5ecd9fcd76e0d6d464643a271c0f52b1fb4c653a Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 22 Oct 2025 10:25:02 -0500 Subject: [PATCH 5/6] change which tests guard for bidi --- .../integration/selenium/webdriver/chrome/options_spec.rb | 6 +++--- rb/spec/integration/selenium/webdriver/edge/options_spec.rb | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb index 945ca08bc991c..95afe4bccb97a 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Chrome - describe Options, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :chrome}] do + describe Options, exclusive: {browser: :chrome} do it 'passes emulated device correctly' do reset_driver!(emulation: {device_name: 'Nexus 5'}) do |driver| ua = driver.execute_script 'return window.navigator.userAgent' @@ -44,7 +44,7 @@ module Chrome end end - it 'enables bidi' do + it 'enables bidi', exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do quit_driver options = Selenium::WebDriver::Options.chrome @@ -62,7 +62,7 @@ module Chrome driver.quit end - it 'enables BiDi on initialization' do + it 'enables BiDi on initialization', exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do quit_driver options = Selenium::WebDriver::Options.chrome(bidi: true) diff --git a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb index e49592d0d82fa..8a4e584425bf0 100644 --- a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Edge - describe Options, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :edge}] do + describe Options, exclusive: {browser: :edge} do it 'passes emulated device correctly' do reset_driver!(emulation: {device_name: 'Nexus 5'}) do |driver| ua = driver.execute_script 'return window.navigator.userAgent' @@ -44,7 +44,7 @@ module Edge end end - it 'enables bidi' do + it 'enables bidi', exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do quit_driver options = Selenium::WebDriver::Options.chrome @@ -62,7 +62,7 @@ module Edge driver.quit end - it 'enables BiDi on initialization' do + it 'enables BiDi on initialization', exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do quit_driver options = Selenium::WebDriver::Options.edge(bidi: true) From 67b16b983eb9af0a8fd65a7d1eb9940c9611e716 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 22 Oct 2025 10:48:53 -0500 Subject: [PATCH 6/6] fix linting --- rb/spec/integration/selenium/webdriver/chrome/options_spec.rb | 3 ++- rb/spec/integration/selenium/webdriver/edge/options_spec.rb | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb index 95afe4bccb97a..d687a50b46737 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb @@ -62,7 +62,8 @@ module Chrome driver.quit end - it 'enables BiDi on initialization', exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do + it 'enables BiDi on initialization', + exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do quit_driver options = Selenium::WebDriver::Options.chrome(bidi: true) diff --git a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb index 8a4e584425bf0..f5ec3c975344f 100644 --- a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb @@ -62,7 +62,8 @@ module Edge driver.quit end - it 'enables BiDi on initialization', exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do + it 'enables BiDi on initialization', + exclusive: {bidi: true, reason: 'bazel does not have dependencies otherwise'} do quit_driver options = Selenium::WebDriver::Options.edge(bidi: true)