Skip to content

Commit 4116a58

Browse files
committed
Move the context managers inside remote.network
1 parent e9d01ef commit 4116a58

File tree

2 files changed

+39
-33
lines changed

2 files changed

+39
-33
lines changed

py/selenium/webdriver/remote/network.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717
from collections import defaultdict
18+
from contextlib import asynccontextmanager
1819

1920
import trio
2021

2122
from selenium.webdriver.common.bidi import network
2223
from selenium.webdriver.common.bidi.browsing_context import Navigate
2324
from selenium.webdriver.common.bidi.browsing_context import NavigateParameters
25+
from selenium.webdriver.common.bidi.cdp import open_cdp
2426
from selenium.webdriver.common.bidi.network import AddInterceptParameters
2527
from selenium.webdriver.common.bidi.network import BeforeRequestSent
2628
from selenium.webdriver.common.bidi.network import BeforeRequestSentParameters
@@ -36,13 +38,24 @@ def __init__(self, driver):
3638
self.intercepts = defaultdict(lambda: {"event_name": None, "handlers": []})
3739
self.bidi_network = None
3840
self.conn = None
41+
self.nursery = None
3942

4043
self.remove_request_handler = self.remove_intercept
4144
self.clear_request_handlers = self.clear_intercepts
4245

43-
async def get(self, url, conn, wait="complete"):
46+
@asynccontextmanager
47+
async def set_context(self):
48+
ws_url = self.driver.caps.get("webSocketUrl")
49+
async with open_cdp(ws_url) as conn:
50+
self.conn = conn
51+
self.bidi_network = network.Network(conn)
52+
async with trio.open_nursery() as nursery:
53+
self.nursery = nursery
54+
yield
55+
56+
async def get(self, url, wait="complete"):
4457
params = NavigateParameters(context=self.driver.current_window_handle, url=url, wait=wait)
45-
await conn.execute(Navigate(params).cmd())
58+
await self.conn.execute(Navigate(params).cmd())
4659

4760
async def add_listener(self, event, callback):
4861
event_name = event.event_class
@@ -57,11 +70,7 @@ async def add_listener(self, event, callback):
5770
except trio.ClosedResourceError:
5871
pass
5972

60-
async def add_handler(self, event, handler, urlPatterns=None, conn=None, task_status=trio.TASK_STATUS_IGNORED):
61-
if not self.conn:
62-
self.conn = conn
63-
self.bidi_network = network.Network(conn)
64-
73+
async def add_handler(self, event, handler, urlPatterns=None):
6574
event_name = event.event_class
6675
phase_name = event_name.split(".")[-1]
6776

@@ -73,11 +82,11 @@ async def add_handler(self, event, handler, urlPatterns=None, conn=None, task_st
7382

7483
self.intercepts[intercept]["event_name"] = event_name
7584
self.intercepts[intercept]["handlers"].append(handler)
76-
task_status.started(intercept)
77-
await self.add_listener(event=event, callback=self.handle_events)
85+
self.nursery.start_soon(self.add_listener, event, self.handle_events)
86+
return intercept
7887

79-
async def add_request_handler(self, handler, urlPatterns=None, conn=None, task_status=trio.TASK_STATUS_IGNORED):
80-
intercept = await self.add_handler(BeforeRequestSent, handler, urlPatterns, conn, task_status)
88+
async def add_request_handler(self, handler, urlPatterns=None):
89+
intercept = await self.add_handler(BeforeRequestSent, handler, urlPatterns)
8190
return intercept
8291

8392
async def handle_events(self, event_params):

py/test/selenium/webdriver/common/bidi_network_tests.py

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717
import pytest
18-
import trio
1918

20-
from selenium.webdriver.common.bidi.cdp import open_cdp
2119
from selenium.webdriver.common.bidi.network import UrlPatternString
2220

2321

@@ -38,23 +36,22 @@ def request_handler(params):
3836
json = {"request": request, "url": url3}
3937
return json
4038

41-
ws_url = driver.caps.get("webSocketUrl")
42-
async with open_cdp(ws_url) as conn:
43-
async with trio.open_nursery() as nursery:
44-
# Multiple intercepts
45-
intercept1 = await nursery.start(driver.network.add_request_handler, request_handler, pattern1, conn)
46-
intercept2 = await nursery.start(driver.network.add_request_handler, request_handler, pattern2, conn)
47-
await driver.network.get(url1, conn)
48-
assert driver.title == "We Leave From Here"
49-
await driver.network.get(url2, conn)
50-
assert driver.title == "We Leave From Here"
51-
52-
# Removal of a single intercept
53-
await driver.network.remove_intercept(intercept2)
54-
await driver.network.get(url2, conn)
55-
assert driver.title == "clicks"
56-
await driver.network.get(url1, conn)
57-
assert driver.title == "We Leave From Here"
58-
59-
await driver.network.remove_intercept(intercept1)
60-
assert driver.title == "We Leave From Here"
39+
async with driver.network.set_context():
40+
# Multiple intercepts
41+
intercept1 = await driver.network.add_request_handler(request_handler, pattern1)
42+
intercept2 = await driver.network.add_request_handler(request_handler, pattern2)
43+
await driver.network.get(url1)
44+
assert driver.title == "We Leave From Here"
45+
await driver.network.get(url2)
46+
assert driver.title == "We Leave From Here"
47+
48+
# Removal of a single intercept
49+
await driver.network.remove_intercept(intercept2)
50+
await driver.network.get(url2)
51+
assert driver.title == "clicks"
52+
await driver.network.get(url1)
53+
assert driver.title == "We Leave From Here"
54+
55+
await driver.network.remove_intercept(intercept1)
56+
await driver.network.get(url1)
57+
assert driver.title == "Hello WebDriver"

0 commit comments

Comments
 (0)