Skip to content

Commit aa6790e

Browse files
authored
fix(api): remove browserType.connect() (microsoft#293)
1 parent 7ca5a89 commit aa6790e

File tree

6 files changed

+30
-281
lines changed

6 files changed

+30
-281
lines changed

CONTRIBUTING.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,33 @@
1+
# Contributing
2+
3+
## How to Contribute
4+
5+
### Configuring python environment
6+
7+
The project requires python version 3.8+. To set it as default in the environment run the following commands:
8+
9+
```bash
10+
python3.8 -m venv env
11+
source ./env/bin/activate
12+
```
13+
14+
Install required dependencies:
15+
16+
```bash
17+
python -m pip install --upgrade pip wheel
18+
pip install -r local-requirements.txt
19+
pip install -e .
20+
```
21+
22+
For more details look at the [CI configuration](./blob/master/.github/workflows/ci.yml).
23+
24+
### Regenerating APIs
25+
26+
```bash
27+
./scripts/update_api.sh
28+
pre-commit run --all-files
29+
```
30+
131
## Contributor License Agreement
232

333
This project welcomes contributions and suggestions. Most contributions require you to agree to a

playwright/async_api.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6310,32 +6310,6 @@ async def launchPersistentContext(
63106310
)
63116311
)
63126312

6313-
async def connect(
6314-
self, wsEndpoint: str, slowMo: int = None, timeout: int = None
6315-
) -> "Browser":
6316-
"""BrowserType.connect
6317-
6318-
This methods attaches Playwright to an existing browser instance.
6319-
6320-
Parameters
6321-
----------
6322-
wsEndpoint : str
6323-
A browser websocket endpoint to connect to. **required**
6324-
slowMo : Optional[int]
6325-
Slows down Playwright operations by the specified amount of milliseconds. Useful so that you can see what is going on. Defaults to 0.
6326-
timeout : Optional[int]
6327-
Maximum time in milliseconds to wait for the connection to be established. Defaults to `30000` (30 seconds). Pass `0` to disable timeout.
6328-
6329-
Returns
6330-
-------
6331-
Browser
6332-
"""
6333-
return mapping.from_impl(
6334-
await self._impl_obj.connect(
6335-
wsEndpoint=wsEndpoint, slowMo=slowMo, timeout=timeout
6336-
)
6337-
)
6338-
63396313

63406314
mapping.register(BrowserTypeImpl, BrowserType)
63416315

playwright/browser_type.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,6 @@ async def launchPersistentContext(
127127
raise not_installed_error(f'"{self.name}" browser was not found.')
128128
raise e
129129

130-
async def connect(
131-
self, wsEndpoint: str, slowMo: int = None, timeout: int = None
132-
) -> Browser:
133-
return from_channel(
134-
await self._channel.send("connect", locals_to_params(locals()))
135-
)
136-
137130

138131
def normalize_launch_params(params: Dict) -> None:
139132
if "env" in params:

playwright/sync_api.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6554,34 +6554,6 @@ def launchPersistentContext(
65546554
)
65556555
)
65566556

6557-
def connect(
6558-
self, wsEndpoint: str, slowMo: int = None, timeout: int = None
6559-
) -> "Browser":
6560-
"""BrowserType.connect
6561-
6562-
This methods attaches Playwright to an existing browser instance.
6563-
6564-
Parameters
6565-
----------
6566-
wsEndpoint : str
6567-
A browser websocket endpoint to connect to. **required**
6568-
slowMo : Optional[int]
6569-
Slows down Playwright operations by the specified amount of milliseconds. Useful so that you can see what is going on. Defaults to 0.
6570-
timeout : Optional[int]
6571-
Maximum time in milliseconds to wait for the connection to be established. Defaults to `30000` (30 seconds). Pass `0` to disable timeout.
6572-
6573-
Returns
6574-
-------
6575-
Browser
6576-
"""
6577-
return mapping.from_impl(
6578-
self._sync(
6579-
self._impl_obj.connect(
6580-
wsEndpoint=wsEndpoint, slowMo=slowMo, timeout=timeout
6581-
)
6582-
)
6583-
)
6584-
65856557

65866558
mapping.register(BrowserTypeImpl, BrowserType)
65876559

scripts/expected_api_mismatch.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ Parameter not documented: Browser.newPage(defaultBrowserType=)
107107
# Logger
108108
Parameter not implemented: Browser.newContext(logger=)
109109
Parameter not implemented: BrowserType.launch(logger=)
110-
Parameter not implemented: BrowserType.connect(logger=)
111110
Parameter not implemented: BrowserType.launchPersistentContext(logger=)
112111
Parameter not implemented: Browser.newPage(logger=)
113112

tests/async/test_launcher.py

Lines changed: 0 additions & 219 deletions
Original file line numberDiff line numberDiff line change
@@ -104,150 +104,6 @@ async def test_browser_type_name_should_work(
104104
raise ValueError("Unknown browser")
105105

106106

107-
@pytest.mark.skip()
108-
async def test_browser_is_connected_should_set_connected_state(
109-
browser_type, launch_arguments
110-
):
111-
browser_server = await browser_type.launchServer(**launch_arguments)
112-
remote = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
113-
assert remote.isConnected()
114-
await remote.close()
115-
assert remote.isConnected() is False
116-
await browser_server.close()
117-
118-
119-
@pytest.mark.skip()
120-
async def test_browser_is_connected_should_throw_when_used_after_isConnected_returns_false(
121-
browser_type, launch_arguments
122-
):
123-
browser_server = await browser_type.launchServer(**launch_arguments)
124-
remote = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
125-
page = await remote.newPage()
126-
disconnected_future = asyncio.Future()
127-
remote.once("disconnected", lambda: disconnected_future.set_result(None))
128-
await asyncio.gather(browser_server.close(), disconnected_future)
129-
assert remote.isConnected() is False
130-
with pytest.raises(Error) as exc:
131-
await page.evaluate('"1 + 1"')
132-
assert "has been closed" in exc.value.message
133-
134-
135-
@pytest.mark.skip()
136-
async def test_browser_disconnect_should_reject_navigation_when_browser_closes(
137-
browser_type, launch_arguments, server
138-
):
139-
server.set_route("/one-style.css", lambda r: None)
140-
browser_server = await browser_type.launchServer(**launch_arguments)
141-
remote = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
142-
page = await remote.newPage()
143-
144-
async def handle_goto():
145-
with pytest.raises(Error) as exc:
146-
await page.goto(server.PREFIX + "/one-style.html", timeout=60000)
147-
assert "Navigation failed because page was closed!" in exc.value.message
148-
149-
wait_for_request = asyncio.create_task(server.wait_for_request("/one-style.css"))
150-
goto_assert = asyncio.create_task(handle_goto())
151-
await wait_for_request
152-
await remote.close()
153-
await goto_assert
154-
await browser_server.close()
155-
156-
157-
@pytest.mark.skip()
158-
async def test_browser_disconnect_should_reject_waitForSelector_when_browser_closes(
159-
browser_type, launch_arguments, server
160-
):
161-
server.set_route("/empty.html", lambda r: None)
162-
browser_server = await browser_type.launchServer(**launch_arguments)
163-
remote = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
164-
page = await remote.newPage()
165-
wait_for_selector_future = asyncio.Future()
166-
167-
async def handle_wait_for_selector():
168-
try:
169-
await page.waitForSelector("div", state="attached", timeout=60000)
170-
except Error as exc:
171-
wait_for_selector_future.set_result(exc)
172-
173-
# Make sure the previous waitForSelector has time to make it to the browser before we disconnect.
174-
asyncio.create_task(handle_wait_for_selector())
175-
await asyncio.sleep(0) # execute scheduled tasks, but don't await them
176-
await page.waitForSelector("body", state="attached")
177-
178-
await remote.close()
179-
error = await wait_for_selector_future
180-
assert "Protocol error" in error.message
181-
await browser_server.close()
182-
183-
184-
@pytest.mark.skip()
185-
async def test_browser_disconnect_should_throw_if_used_after_disconnect(
186-
browser_type, launch_arguments
187-
):
188-
browser_server = await browser_type.launchServer(**launch_arguments)
189-
remote = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
190-
page = await remote.newPage()
191-
await remote.close()
192-
with pytest.raises(Error) as exc:
193-
await page.evaluate('"1 + 1"')
194-
assert "has been closed" in exc.value.message
195-
await browser_server.close()
196-
197-
198-
@pytest.mark.skip()
199-
async def test_browser_disconnect_should_emit_close_events_on_pages_and_contexts(
200-
browser_type, launch_arguments
201-
):
202-
browser_server = await browser_type.launchServer(**launch_arguments)
203-
remote = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
204-
context = await remote.newContext()
205-
page = await context.newPage()
206-
pages_closed = []
207-
page.on("close", lambda: pages_closed.append(True))
208-
context_close_fixture = asyncio.Future()
209-
context.on("close", lambda: context_close_fixture.set_result(None))
210-
await asyncio.gather(context_close_fixture, browser_server.close())
211-
assert len(pages_closed) == 1
212-
213-
214-
@pytest.mark.skip()
215-
async def test_browser_close_should_terminate_network_waiters(
216-
browser_type, launch_arguments, server
217-
):
218-
browser_server = await browser_type.launchServer(**launch_arguments)
219-
remote = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
220-
new_page = await remote.newPage()
221-
wait_for_request_future = asyncio.Future()
222-
223-
async def handle_waitForRequest():
224-
try:
225-
await new_page.waitForRequest(server.EMPTY_PAGE)
226-
except Error as exc:
227-
wait_for_request_future.set_result(exc)
228-
229-
wait_for_response_future = asyncio.Future()
230-
231-
async def handle_waitForResponse():
232-
try:
233-
await new_page.waitForResponse(server.EMPTY_PAGE)
234-
except Error as exc:
235-
wait_for_response_future.set_result(exc)
236-
237-
asyncio.create_task(handle_waitForRequest())
238-
asyncio.create_task(handle_waitForResponse())
239-
await asyncio.sleep(0) # execute scheduled tasks, but don't await them
240-
results = await asyncio.gather(
241-
wait_for_request_future,
242-
wait_for_response_future,
243-
browser_server.close(),
244-
)
245-
for i in range(2):
246-
message = results[i].message
247-
assert "Page closed" in message
248-
assert "Timeout" not in message
249-
250-
251107
async def test_browser_close_should_fire_close_event_for_all_contexts(
252108
browser_type, launch_arguments
253109
):
@@ -266,78 +122,3 @@ async def test_browser_close_should_be_callable_twice(browser_type, launch_argum
266122
browser.close(),
267123
)
268124
await browser.close()
269-
270-
271-
@pytest.mark.skip()
272-
async def test_browser_type_launch_server_should_work(browser_type, launch_arguments):
273-
browser_server = await browser_type.launchServer(**launch_arguments)
274-
browser = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
275-
browser_context = await browser.newContext()
276-
assert len(browser_context.pages) == 0
277-
assert browser_server.wsEndpoint
278-
page = await browser_context.newPage()
279-
assert await page.evaluate("11 * 11") == 121
280-
await page.close()
281-
await browser.close()
282-
await browser_server.close()
283-
284-
285-
@pytest.mark.skip()
286-
async def test_browser_type_launch_server_should_fire_disconnected_when_closing_the_server(
287-
browser_type, launch_arguments
288-
):
289-
browser_server = await browser_type.launchServer(**launch_arguments)
290-
browser = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
291-
292-
disconnected_promise = asyncio.Future()
293-
browser.once("disconnected", lambda: disconnected_promise.set_result(None))
294-
295-
closed_promise = asyncio.Future()
296-
browser_server.on("close", lambda: closed_promise.set_result(None))
297-
298-
await browser_server.kill()
299-
await asyncio.gather(
300-
disconnected_promise,
301-
closed_promise,
302-
)
303-
304-
305-
@pytest.mark.skip()
306-
async def test_browser_type_launch_server_should_fire_close_event_during_kill(
307-
browser_type, launch_arguments
308-
):
309-
order = []
310-
browser_server = await browser_type.launchServer(**launch_arguments)
311-
312-
closed_promise = asyncio.Future()
313-
browser_server.on(
314-
"close", lambda: (order.append("closed"), closed_promise.set_result(None))
315-
)
316-
317-
async def kill_with_order():
318-
await browser_server.kill()
319-
order.append("killed")
320-
321-
await asyncio.gather(kill_with_order(), closed_promise)
322-
assert order == ["closed", "killed"]
323-
324-
325-
@pytest.mark.skip()
326-
async def test_browser_type_connect_should_be_able_to_reconnect_to_a_browser(
327-
browser_type, launch_arguments, server
328-
):
329-
browser_server = await browser_type.launchServer(**launch_arguments)
330-
331-
browser = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
332-
browser_context = await browser.newContext()
333-
page = await browser_context.newPage()
334-
await page.goto(server.EMPTY_PAGE)
335-
await browser.close()
336-
337-
browser = await browser_type.connect(wsEndpoint=browser_server.wsEndpoint)
338-
browser_context = await browser.newContext()
339-
page = await browser_context.newPage()
340-
await page.goto(server.EMPTY_PAGE)
341-
await browser.close()
342-
343-
await browser_server.close()

0 commit comments

Comments
 (0)