Skip to content

Commit b45474b

Browse files
committed
add tests
1 parent 7f21518 commit b45474b

4 files changed

Lines changed: 46 additions & 13 deletions

File tree

lib/appium_lib_core/common/base/bidi_bridge.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,13 @@ class BiDiBridge < ::Appium::Core::Base::Bridge
4545
#
4646
def create_session(capabilities)
4747
super
48-
socket_url = @capabilities[:web_socket_url]
49-
@bidi = ::Selenium::WebDriver::BiDi.new(url: socket_url)
48+
49+
unless @capabilities.nil?
50+
socket_url = @capabilities[:web_socket_url]
51+
@bidi = ::Selenium::WebDriver::BiDi.new(url: socket_url) if socket_url
52+
end
53+
54+
@capabilities
5055
end
5156

5257
def get(url)

lib/appium_lib_core/common/base/bridge.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,6 @@ def create_session(capabilities)
116116
raise ::Selenium::WebDriver::Error::WebDriverError, 'no sessionId in returned payload' unless @session_id
117117

118118
@capabilities = json_create(response['capabilities'])
119-
120-
socket_url = @capabilities[:web_socket_url]
121-
@bidi = ::Selenium::WebDriver::BiDi.new(url: socket_url) if socket_url
122119
end
123120

124121
# Append +appium:+ prefix for Appium following W3C spec

lib/appium_lib_core/common/base/driver.rb

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ def initialize(bridge: nil, listener: nil, **opts) # rubocop:disable Lint/Missin
5757
# internal use
5858
@has_bidi = false
5959

60+
::Selenium::WebDriver::Remote::Bridge.element_class = ::Appium::Core::Element
61+
6062
bridge ||= create_bridge(**opts)
6163
add_extensions(bridge.browser)
6264
@bridge = listener ? ::Appium::Support::EventFiringBridge.new(bridge, listener, **original_opts) : bridge
@@ -80,14 +82,9 @@ def create_bridge(**opts)
8082

8183
raise ::Appium::Core::Error::ArgumentError, "Unable to create a driver with parameters: #{opts}" unless opts.empty?
8284

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
85+
@has_bidi = capabilities && capabilities['webSocketUrl']
86+
bridge_clzz = @has_bidi ? ::Appium::Core::Base::BiDiBridge : ::Appium::Core::Base::Bridge
87+
bridge = bridge_clzz.new(**bridge_opts)
9188

9289
if session_id.nil?
9390
bridge.create_session(capabilities)

test/unit/driver_test.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,40 @@ def test_listener_with_custom_listener_elements
700700
assert_equal ::Appium::Core::Element, c_el.first.class
701701
end
702702

703+
def test_bidi_bridge
704+
android_mock_create_session_w3c_direct = lambda do |core|
705+
response = {
706+
value: {
707+
sessionId: '1234567890',
708+
capabilities: {
709+
platformName: :android,
710+
automationName: ENV['APPIUM_DRIVER'] || 'uiautomator2',
711+
deviceName: 'Android Emulator',
712+
webSocketUrl: 'ws://192.168.1.49:4723/bidi/fbed26aa-e104-42fc-9f5e-b401dc6cc2bc'
713+
}
714+
}
715+
}.to_json
716+
717+
stub_request(:post, 'http://127.0.0.1:4723/session')
718+
.to_return(headers: HEADER, status: 200, body: response)
719+
720+
driver = core.start_driver
721+
722+
assert_requested(:post, 'http://127.0.0.1:4723/session', times: 1)
723+
driver
724+
end
725+
726+
capabilities = Caps.android[:capabilities]
727+
capabilities['webSocketUrl'] = true
728+
729+
core = ::Appium::Core.for capabilities: capabilities
730+
driver = android_mock_create_session_w3c_direct.call(core)
731+
732+
assert_equal driver.send(:bridge).class, Appium::Core::Base::BiDiBridge
733+
assert_equal driver.instance_variable_get(:@wait_timeout), 30
734+
assert !driver.send(:bridge).respond_to?(:driver)
735+
end
736+
703737
def test_elements
704738
driver = android_mock_create_session
705739

0 commit comments

Comments
 (0)