1515# specific language governing permissions and limitations
1616# under the License.
1717
18- import http .server
1918import os
20- import socketserver
21- import threading
2219
2320import pytest
2421
2825from selenium .webdriver .common .bidi .session import UserPromptHandler , UserPromptHandlerType
2926from selenium .webdriver .common .by import By
3027from selenium .webdriver .common .proxy import Proxy , ProxyType
31- from selenium .webdriver .common .utils import free_port
3228from selenium .webdriver .common .window import WindowTypes
3329from selenium .webdriver .support .ui import WebDriverWait
3430
3531
36- class FakeProxyHandler (http .server .SimpleHTTPRequestHandler ):
37- def do_GET (self ):
38- print (f"[Fake Proxy] Intercepted request to: { self .path } " )
39- self .send_response (200 )
40- self .end_headers ()
41- self .wfile .write (b"proxied response" )
42-
43-
44- def start_fake_proxy (port ):
45- server = socketserver .TCPServer (("localhost" , port ), FakeProxyHandler )
46- thread = threading .Thread (target = server .serve_forever , daemon = True )
47- thread .start ()
48- return server
49-
50-
5132def test_browser_initialized (driver ):
5233 """Test that the browser module is initialized properly."""
5334 assert driver .browser is not None
@@ -165,21 +146,21 @@ def test_create_user_context_with_direct_proxy(driver):
165146
166147
167148@pytest .mark .xfail_chrome (reason = "Chrome auto upgrades HTTP to HTTPS in untrusted networks like CI environments" )
168- @pytest .mark .xfail_firefox (reason = "Firefox proxy settings are different" )
169- @pytest .mark .xfail_remote
170- def test_create_user_context_with_manual_proxy_all_params (driver ):
149+ def test_create_user_context_with_manual_proxy_all_params (driver , proxy_server ):
171150 """Test creating a user context with manual proxy configuration."""
172- # Start a fake proxy server
173- port = free_port ()
174- fake_proxy_server = start_fake_proxy (port = port )
151+ create_proxy_server = proxy_server (response_content = b"proxied response" )
152+ no_proxy_server = proxy_server (response_content = b"direct connection - not proxied" )
153+
154+ proxy_port = create_proxy_server ["port" ]
155+ no_proxy_port = no_proxy_server ["port" ]
175156
176157 proxy = Proxy ()
177158 proxy .proxy_type = ProxyType .MANUAL
178- proxy .http_proxy = f"localhost:{ port } "
179- proxy .ssl_proxy = f"localhost:{ port } "
180- proxy .socks_proxy = f"localhost:{ port } "
159+ proxy .http_proxy = f"localhost:{ proxy_port } "
160+ proxy .ssl_proxy = f"localhost:{ proxy_port } "
161+ proxy .socks_proxy = f"localhost:{ proxy_port } "
181162 proxy .socks_version = 5
182- proxy .no_proxy = ["the-internet.herokuapp.com " ]
163+ proxy .no_proxy = [f"localhost: { no_proxy_port } " ]
183164
184165 user_context = driver .browser .create_user_context (proxy = proxy )
185166
@@ -189,9 +170,9 @@ def test_create_user_context_with_manual_proxy_all_params(driver):
189170
190171 try :
191172 # Visit no proxy site, it should bypass proxy
192- driver .get ("http://the-internet.herokuapp.com /" )
173+ driver .get (f "http://localhost: { no_proxy_port } /" )
193174 body_text = driver .find_element (By .TAG_NAME , "body" ).text .lower ()
194- assert "welcome to the-internet " in body_text
175+ assert "direct connection - not proxied " in body_text
195176
196177 # Visit a site that should be proxied
197178 driver .get ("http://example.com/" )
@@ -201,18 +182,13 @@ def test_create_user_context_with_manual_proxy_all_params(driver):
201182
202183 finally :
203184 driver .browser .remove_user_context (user_context )
204- fake_proxy_server .shutdown ()
205- fake_proxy_server .server_close ()
206185
207186
208187@pytest .mark .xfail_chrome (reason = "Chrome auto upgrades HTTP to HTTPS in untrusted networks like CI environments" )
209- @pytest .mark .xfail_firefox (reason = "Firefox proxy settings are different" )
210- @pytest .mark .xfail_remote
211- def test_create_user_context_with_proxy_and_accept_insecure_certs (driver ):
188+ def test_create_user_context_with_proxy_and_accept_insecure_certs (driver , proxy_server ):
212189 """Test creating a user context with both acceptInsecureCerts and proxy parameters."""
213- # Start fake proxy server
214- port = free_port ()
215- fake_proxy_server = start_fake_proxy (port = port )
190+ create_proxy_server = proxy_server (response_content = b"proxied response" )
191+ port = create_proxy_server ["port" ]
216192
217193 proxy = Proxy ()
218194 proxy .proxy_type = ProxyType .MANUAL
@@ -238,8 +214,6 @@ def test_create_user_context_with_proxy_and_accept_insecure_certs(driver):
238214
239215 finally :
240216 driver .browser .remove_user_context (user_context )
241- fake_proxy_server .shutdown ()
242- fake_proxy_server .server_close ()
243217
244218
245219def test_create_user_context_with_unhandled_prompt_behavior (driver , pages ):
0 commit comments