Skip to content

Commit 8b29538

Browse files
committed
feat: add BiDiBridge
1 parent f244a36 commit 8b29538

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

lib/appium_lib_core/common/base/bridge.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ def convert(how, what)
2121
end
2222
end # LocatorConverter
2323

24-
class Bridge < ::Selenium::WebDriver::Remote::Bridge
24+
# TODO: switch to use BiDiBridge with 'webSocketUrl'
25+
class Bridge < ::Selenium::WebDriver::Remote::BiDiBridge
26+
# class Bridge < ::Selenium::WebDriver::Remote::Bridge
2527
include Device::DeviceLock
2628
include Device::Keyboard
2729
include Device::ImeActions
@@ -116,6 +118,9 @@ def create_session(capabilities)
116118
raise ::Selenium::WebDriver::Error::WebDriverError, 'no sessionId in returned payload' unless @session_id
117119

118120
@capabilities = json_create(response['capabilities'])
121+
122+
socket_url = @capabilities[:web_socket_url]
123+
@bidi = ::Selenium::WebDriver::BiDi.new(url: socket_url) if socket_url
119124
end
120125

121126
# Append +appium:+ prefix for Appium following W3C spec
@@ -313,6 +318,11 @@ def element_screenshot(element_id)
313318
def send_command(command_params)
314319
execute :chrome_send_command, {}, command_params
315320
end
321+
322+
def quit
323+
bidi&.close
324+
super
325+
end
316326
end # class Bridge
317327
end # class Base
318328
end # module Core

lib/appium_lib_core/common/base/driver.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ 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+
3235
include ::Appium::Core::Base::Rotatable
3336
include ::Appium::Core::Base::TakesScreenshot
3437
include ::Appium::Core::Base::HasRemoteStatus
@@ -54,6 +57,7 @@ def initialize(bridge: nil, listener: nil, **opts) # rubocop:disable Lint/Missin
5457
@devtools = nil
5558
@bidi = nil
5659

60+
# TODO: modify the eleemnt_class
5761
# in the selenium webdriver as well
5862
::Selenium::WebDriver::Remote::Bridge.element_class = ::Appium::Core::Element
5963
bridge ||= create_bridge(**opts)

0 commit comments

Comments
 (0)