-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconftest.py
More file actions
79 lines (61 loc) · 2.21 KB
/
conftest.py
File metadata and controls
79 lines (61 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import pytest_html
import pytest
import base64
from playwright.sync_api import sync_playwright
from pages.feature_login_page import LoginPage
from pytest_metadata.plugin import metadata
@pytest.fixture(scope="session")
def browser():
"""Provide a browser instance for the test session."""
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
yield browser
browser.close()
@pytest.fixture
def page(browser):
"""Provide a new page for each test."""
page = browser.new_page()
yield page
page.close()
@pytest.fixture
def login_page(page, base_url):
"""Fixture to provide LoginPage instance."""
page.goto(base_url + "/login")
return LoginPage(page)
@pytest.hookimpl(optionalhook=True)
def pytest_metadata(metadata):
metadata.clear()
metadata["Base URL"] = config.getoption("--base-url") if hasattr(config.option, "base_url") else "N/A"
def pytest_html_report_title(report):
report.title = "Automation Report - Playwright Python"
@pytest.hookimpl(optionalhook=True)
def pytest_metadata(metadata):
metadata.pop("JAVA_HOME", None)
metadata.pop("Plugins", None)
metadata.pop("Packages", None)
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
if report.when != "call":
return
page = item.funcargs.get("page", None)
if page:
screenshot_bytes = page.screenshot(full_page=True)
screenshot_base64 = base64.b64encode(screenshot_bytes).decode("utf-8")
status_color = "#28a745" if report.passed else "#dc3545"
status_text = "SUCCESS" if report.passed else "FAILURE"
html = f"""
<div style="border:2px solid {status_color}; padding:10px; margin-top:10px;">
<h3 style="color:{status_color};">
{status_text} - {item.name}
</h3>
<img src="data:image/png;base64,{screenshot_base64}"
style="width:600px; border-radius:8px;"
onclick="window.open(this.src)"
/>
</div>
"""
extra = getattr(report, "extras", [])
extra.append(pytest_html.extras.html(html))
report.extras = extra