@@ -219,6 +219,24 @@ async def test_connect_with_ws_address_returns_tab_and_sets_handler_ws(mock_brow
219219 assert tab ._ws_address == 'ws://localhost:9222/devtools/page/p1'
220220
221221
222+ @pytest .mark .asyncio
223+ async def test_connect_with_ws_address_preserves_token_in_tab_ws (mock_browser ):
224+ ws_browser = 'ws://localhost:9222/devtools/browser/abcdef?token=secrettoken'
225+ mock_browser .get_targets = AsyncMock (return_value = [{'type' : 'page' , 'url' : 'https://example' , 'targetId' : 'p1' }])
226+ mock_browser ._get_valid_tab_id = AsyncMock (return_value = 'p1' )
227+ mock_browser ._connection_handler ._ensure_active_connection = AsyncMock ()
228+
229+ tab = await mock_browser .connect (ws_browser )
230+
231+ assert mock_browser ._ws_address == ws_browser
232+ assert mock_browser ._connection_handler ._ws_address == ws_browser
233+ mock_browser ._connection_handler ._ensure_active_connection .assert_awaited_once ()
234+
235+ # Token should be preserved in page-level ws URL
236+ assert isinstance (tab , Tab )
237+ assert tab ._ws_address == 'ws://localhost:9222/devtools/page/p1?token=secrettoken'
238+
239+
222240@pytest .mark .asyncio
223241async def test_new_tab_uses_ws_base_when_ws_address_present (mock_browser ):
224242 # Simulate browser connected via ws
@@ -365,6 +383,12 @@ def test__get_tab_ws_address_raises_when_ws_not_set(mock_browser):
365383 mock_browser ._get_tab_ws_address ('some-tab' )
366384
367385
386+ def test__get_tab_ws_address_preserves_query_and_fragment (mock_browser ):
387+ mock_browser ._ws_address = 'ws://host:9222/devtools/browser/abc?token=XYZ#frag'
388+ result = mock_browser ._get_tab_ws_address ('tab1' )
389+ assert result == 'ws://host:9222/devtools/page/tab1?token=XYZ#frag'
390+
391+
368392@pytest .mark .asyncio
369393async def test_get_window_id (mock_browser ):
370394 mock_browser .get_targets = AsyncMock (return_value = [{'targetId' : 'target1' , 'type' : 'page' }])
0 commit comments