@@ -29,9 +29,6 @@ class Driver < ::Selenium::WebDriver::Driver
2929 include ::Selenium ::WebDriver ::DriverExtensions ::UploadsFiles
3030 include ::Selenium ::WebDriver ::DriverExtensions ::HasSessionId
3131
32- # TODO: allow to install only for newer version
33- include ::Selenium ::WebDriver ::DriverExtensions ::HasBiDi
34-
3532 include ::Appium ::Core ::Base ::Rotatable
3633 include ::Appium ::Core ::Base ::TakesScreenshot
3734 include ::Appium ::Core ::Base ::HasRemoteStatus
@@ -57,9 +54,9 @@ def initialize(bridge: nil, listener: nil, **opts) # rubocop:disable Lint/Missin
5754 @devtools = nil
5855 @bidi = nil
5956
60- # TODO: modify the eleemnt_class
61- # in the selenium webdriver as well
62- :: Selenium :: WebDriver :: Remote :: Bridge . element_class = :: Appium :: Core :: Element
57+ # internal use
58+ @has_bidi = false
59+
6360 bridge ||= create_bridge ( **opts )
6461 add_extensions ( bridge . browser )
6562 @bridge = listener ? ::Appium ::Support ::EventFiringBridge . new ( bridge , listener , **original_opts ) : bridge
@@ -83,7 +80,14 @@ def create_bridge(**opts)
8380
8481 raise ::Appium ::Core ::Error ::ArgumentError , "Unable to create a driver with parameters: #{ opts } " unless opts . empty?
8582
86- bridge = ::Appium ::Core ::Base ::Bridge . new ( **bridge_opts )
83+ if capabilities [ 'webSocketUrl' ]
84+ @has_bidi = true
85+ ::Selenium ::WebDriver ::Remote ::BiDiBridge . element_class = ::Appium ::Core ::Element
86+ bridge = ::Appium ::Core ::Base ::BiDiBridge . new ( **bridge_opts )
87+ else
88+ ::Selenium ::WebDriver ::Remote ::Bridge . element_class = ::Appium ::Core ::Element
89+ bridge = ::Appium ::Core ::Base ::Bridge . new ( **bridge_opts )
90+ end
8791
8892 if session_id . nil?
8993 bridge . create_session ( capabilities )
@@ -97,6 +101,13 @@ def create_bridge(**opts)
97101
98102 public
99103
104+ def bidi
105+ return @bridge . bidi if @has_bidi
106+
107+ msg = 'BiDi must be enabled by providing webSocketUrl capability to true'
108+ raise ( ::Selenium ::WebDriver ::Error ::WebDriverError , msg )
109+ end
110+
100111 # Update +server_url+ and HTTP clients following this arguments, protocol, host, port and path.
101112 # After this method, +@bridge.http+ will be a new instance following them instead of +server_url+ which is
102113 # set before creating session.
0 commit comments