import httpx
from browser_use.browser import BrowserProfile, BrowserSession
async def test_browser_close_doesnt_affect_external_httpx_clients():
"""
Test that Browser.close() doesn't close HTTPX clients created outside the Browser instance.
This test demonstrates the issue where Browser.close() is closing all HTTPX clients.
"""
# Create an external HTTPX client that should remain open
external_client = httpx.AsyncClient()
# Create a BrowserSession instance
browser_session = BrowserSession(browser_profile=BrowserProfile(headless=True))
await browser_session.start()
# Close the browser (which should trigger cleanup_httpx_clients)
await browser_session.stop()
# Check if the external client is still usable
try:
# If the client is closed, this will raise RuntimeError
# Using a simple HEAD request to a reliable URL
await external_client.head('https://www.example.com', timeout=2.0)
client_is_closed = False
except RuntimeError as e:
# If we get "Cannot send a request, as the client has been closed"
client_is_closed = 'client has been closed' in str(e)
except Exception:
# Any other exception means the client is not closed but request failed
client_is_closed = False
finally:
# Always clean up our test client properly
await external_client.aclose()
# Our external client should not be closed by browser.close()
assert not client_is_closed, 'External HTTPX client was incorrectly closed by Browser.close()'