Skip to content

Commit 5d976dc

Browse files
authored
feat(pageerror): added Error.name property support (microsoft#652)
1 parent 027c1fb commit 5d976dc

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

playwright/_impl/_api_types.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@
1616
# stable API.
1717

1818

19+
from typing import Optional
20+
21+
1922
class Error(Exception):
20-
def __init__(self, message: str, stack: str = None) -> None:
23+
def __init__(self, message: str) -> None:
2124
self.message = message
22-
self.stack = stack
25+
self.name: Optional[str] = None
26+
self.stack: Optional[str] = None
2327
super().__init__(message)
2428

2529

playwright/_impl/_helper.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,10 @@ def parse_error(error: ErrorPayload) -> Error:
170170
base_error_class = Error
171171
if error.get("name") == "TimeoutError":
172172
base_error_class = TimeoutError
173-
return base_error_class(
174-
cast(str, patch_error_message(error.get("message"))), error["stack"]
175-
)
173+
exc = base_error_class(cast(str, patch_error_message(error.get("message"))))
174+
exc.name = error["name"]
175+
exc.stack = error["stack"]
176+
return exc
176177

177178

178179
def patch_error_message(message: Optional[str]) -> Optional[str]:

tests/async/test_page.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ async def test_page_error_should_fire(page, server, is_webkit):
398398
async with page.expect_event("pageerror") as error_info:
399399
await page.goto(server.PREFIX + "/error.html")
400400
error = await error_info.value
401+
assert error.name == "Error"
401402
assert error.message == "Fancy error!"
402403
stack = await page.evaluate("window.e.stack")
403404
# Note that WebKit reports the stack of the 'throw' statement instead of the Error constructor call.
@@ -422,15 +423,28 @@ async def test_page_error_should_handle_object(page, is_chromium):
422423
assert error.message == "Object" if is_chromium else "[object Object]"
423424

424425

425-
@pytest.mark.skip_browser("firefox")
426426
async def test_page_error_should_handle_window(page, is_chromium):
427-
# Firefox just does not report this error.
428427
async with page.expect_event("pageerror") as error_info:
429428
await page.evaluate("() => setTimeout(() => { throw window; }, 0)")
430429
error = await error_info.value
431430
assert error.message == "Window" if is_chromium else "[object Window]"
432431

433432

433+
async def test_page_error_should_pass_error_name_property(page):
434+
async with page.expect_event("pageerror") as error_info:
435+
await page.evaluate(
436+
"""() => setTimeout(() => {
437+
const error = new Error("my-message");
438+
error.name = "my-name";
439+
throw error;
440+
}, 0)
441+
"""
442+
)
443+
error = await error_info.value
444+
assert error.message == "my-message"
445+
assert error.name == "my-name"
446+
447+
434448
expected_output = "<html><head></head><body><div>hello</div></body></html>"
435449

436450

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