Skip to content

Commit e06b215

Browse files
committed
Exit nursery on listener removal
1 parent 1855e58 commit e06b215

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

py/selenium/webdriver/remote/network.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717
from dataclasses import fields
18-
18+
import trio
1919
from selenium.webdriver.common.bidi import network
2020
from selenium.webdriver.common.bidi.browsing_context import Navigate, NavigateParameters
2121
from selenium.webdriver.common.bidi.network import (
@@ -35,23 +35,27 @@ def __init__(self, driver):
3535
self.network = None
3636
self.driver = driver
3737
self.intercept = None
38+
self.scope = None
3839

3940
async def add_request_handler(self, request_filter=lambda _: True, handler=default_request_handler, conn=None):
40-
self.network = network.Network(conn)
41-
params = AddInterceptParameters(["beforeRequestSent"])
42-
callback = self._callback(request_filter, handler)
43-
result = await self.network.add_intercept(event=BeforeRequestSent, params=params)
44-
intercept = result["intercept"]
45-
self.intercept = intercept
46-
await self.network.add_listener(event=BeforeRequestSent, callback=callback)
47-
return intercept
41+
with trio.CancelScope() as scope:
42+
self.scope = scope
43+
self.network = network.Network(conn)
44+
params = AddInterceptParameters(["beforeRequestSent"])
45+
callback = self._callback(request_filter, handler)
46+
result = await self.network.add_intercept(event=BeforeRequestSent, params=params)
47+
intercept = result["intercept"]
48+
self.intercept = intercept
49+
await self.network.add_listener(event=BeforeRequestSent, callback=callback)
50+
return intercept
4851

4952
async def get(self, url, conn):
5053
params = NavigateParameters(context=self.driver.current_window_handle, url=url)
5154
await conn.execute(Navigate(params).cmd())
5255

5356
async def remove_request_handler(self):
5457
await self.network.remove_intercept(event=BeforeRequestSent, params=network.RemoveInterceptParameters(self.intercept))
58+
self.scope.cancel()
5559

5660
def _callback(self, request_filter, handler):
5761
async def callback(request):

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,26 @@
2020
from selenium.webdriver.common.bidi.cdp import open_cdp
2121
import trio
2222

23-
@pytest.mark.xfail_safari
24-
@pytest.mark.xfail_firefox
25-
@pytest.mark.xfail_opera
23+
24+
@pytest.mark.no_driver_after_test
2625
async def test_add_request_handler(driver):
2726

2827
def request_filter(params: BeforeRequestSentParameters):
2928
return params.request["url"] == "https://www.example.com/"
3029

3130
def request_handler(params: BeforeRequestSentParameters):
3231
request = params.request["request"]
33-
json = {
34-
"request": request,
35-
"url" : "https://www.selenium.dev/about/"
36-
}
32+
json = {"request": request, "url": "https://www.selenium.dev/about/"}
3733
return ContinueRequestParameters(**json)
3834

3935
ws_url = driver.caps.get("webSocketUrl")
4036
async with open_cdp(ws_url) as conn:
4137
async with trio.open_nursery() as nursery:
4238
nursery.start_soon(driver.network.add_request_handler, request_filter, request_handler, conn)
4339
await trio.sleep(1)
44-
await driver.network.get("https://www.example.com",conn)
40+
await driver.network.get("https://www.example.com", conn)
4541
assert "Selenium" in driver.title
4642
await trio.sleep(1)
4743
await driver.network.remove_request_handler()
48-
await driver.network.get("https://www.example.com",conn)
49-
assert "Example" in driver.title
44+
await driver.network.get("https://www.example.com", conn)
45+
assert "Example" in driver.title

0 commit comments

Comments
 (0)