playwright-pytest
playwright-pytest copied to clipboard
Error during teardown: No video object for page
I recently updated Playwright from v1.33 -> v1.45.1 and am now receiving this error on every run:
.../lib/python3.11/site-packages/pytest_playwright/pytest_playwright.py:236:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_playwright.pytest_playwright.ArtifactsRecorder object at 0x11ac2a650>
failed = False
def did_finish_test(self, failed: bool) -> None:
screenshot_option = self._pytestconfig.getoption("--screenshot")
capture_screenshot = screenshot_option == "on" or (
failed and screenshot_option == "only-on-failure"
)
if capture_screenshot:
for index, screenshot in enumerate(self._screenshots):
human_readable_status = "failed" if failed else "finished"
screenshot_path = _build_artifact_test_folder(
self._pytestconfig,
self._request,
f"test-{human_readable_status}-{index+1}.png",
)
os.makedirs(os.path.dirname(screenshot_path), exist_ok=True)
shutil.move(screenshot, screenshot_path)
else:
for screenshot in self._screenshots:
os.remove(screenshot)
if self._tracing_option == "on" or (
failed and self._tracing_option == "retain-on-failure"
):
for index, trace in enumerate(self._traces):
trace_file_name = (
"trace.zip" if len(self._traces) == 1 else f"trace-{index+1}.zip"
)
trace_path = _build_artifact_test_folder(
self._pytestconfig, self._request, trace_file_name
)
os.makedirs(os.path.dirname(trace_path), exist_ok=True)
shutil.move(trace, trace_path)
else:
for trace in self._traces:
os.remove(trace)
video_option = self._pytestconfig.getoption("--video")
preserve_video = video_option == "on" or (
failed and video_option == "retain-on-failure"
)
if preserve_video:
for index, page in enumerate(self._all_pages):
video = page.video
if not video:
continue
try:
video_file_name = (
"video.webm"
if len(self._all_pages) == 1
else f"video-{index+1}.webm"
)
video.save_as(
path=_build_artifact_test_folder(
self._pytestconfig, self._request, video_file_name
)
)
except Error:
# Silent catch empty videos.
pass
else:
for page in self._all_pages:
# Can be changed to "if page.video" without try/except once https://github.com/microsoft/playwright-python/pull/2410 is released and widely adopted.
if video_option in ["on", "retain-on-failure"]:
try:
> page.video.delete()
E AttributeError: 'NoneType' object has no attribute 'delete'
Do you mind sharing a reproduction with us and how you invoke pytest? Ideally try to create a minimal reproduction by reducing it to a single test-case. etc
Closing as per above - we need more details to act on it. Feel free to re-file.