diff --git a/lib/appium_lib_core/common/base/bidi_bridge.rb b/lib/appium_lib_core/common/base/bidi_bridge.rb index 566fe0cc..09291194 100644 --- a/lib/appium_lib_core/common/base/bidi_bridge.rb +++ b/lib/appium_lib_core/common/base/bidi_bridge.rb @@ -80,11 +80,11 @@ def refresh def quit super ensure - bidi.close + bidi&.close end def close - execute(:close_window).tap { |handles| bidi.close if handles.empty? } + execute(:close_window).tap { |handles| bidi&.close if handles.empty? } end # steep:ignore:end diff --git a/lib/appium_lib_core/common/base/driver.rb b/lib/appium_lib_core/common/base/driver.rb index 3f24b203..ab452746 100644 --- a/lib/appium_lib_core/common/base/driver.rb +++ b/lib/appium_lib_core/common/base/driver.rb @@ -86,7 +86,7 @@ def create_bridge(**opts) raise ::Appium::Core::Error::ArgumentError, "Unable to create a driver with parameters: #{opts}" unless opts.empty? - @has_bidi = capabilities && capabilities['webSocketUrl'] ? true : false + @has_bidi = capabilities && (capabilities['webSocketUrl'] || capabilities[:webSocketUrl]) ? true : false bridge_clzz = @has_bidi ? ::Appium::Core::Base::BiDiBridge : ::Appium::Core::Base::Bridge # steep:ignore:start bridge = bridge_clzz.new(**bridge_opts) diff --git a/test/unit/driver_test.rb b/test/unit/driver_test.rb index 44c397d2..ff19cdf5 100644 --- a/test/unit/driver_test.rb +++ b/test/unit/driver_test.rb @@ -836,6 +836,34 @@ def test_bidi_bridge mock_bidi.verify end + def test_bidi_bridge_with_symbol_key_and_without_server_websocket_url + response = { + value: { + sessionId: '1234567890', + capabilities: { + platformName: :android, + automationName: ENV['APPIUM_DRIVER'] || 'uiautomator2', + deviceName: 'Android Emulator' + } + } + }.to_json + + stub_request(:post, 'http://127.0.0.1:4723/session') + .to_return(headers: HEADER, status: 200, body: response) + + capabilities = Caps.android[:capabilities].merge(webSocketUrl: true) + core = ::Appium::Core.for capabilities: capabilities + driver = core.start_driver + + assert_equal Appium::Core::Base::BiDiBridge, driver.send(:bridge).class + assert_nil driver.bidi + + stub_request(:delete, 'http://127.0.0.1:4723/session/1234567890') + .to_return(headers: HEADER, status: 200, body: { value: nil }.to_json) + + driver.quit + end + def test_elements driver = android_mock_create_session