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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy