Playwright屏幕元素截图并保存至allure报告

Playwright屏幕元素截图并保存至allure报告

引言

在UI自动化测试中,我们经常需要获取屏幕截图,尤其是在CI环境中,一般是使用浏览器的无头模式执行测试,此时对关键步骤进行页面截图就很重要了。通常自动化框架都提供了页面截图功能,但是基本都是只提供了页面整体的截图或者对页面元素单独截图,无法做到在页面整体截图中将我想要的元素标记出来(比如红框标出),而这种截图在某些预期结果的场景下需要经常用到,比如人工辅助结果判断,或者在结果判断不正确时标记出不正确的元素以帮助错误排查。因此,在项目中单独封装了标记元素的截图方法。

问题分析

  1. 获取屏幕截图:这个很简单,直接通过 page.screenshot 方法就可以获得
  2. 获取元素位置:通过 ElementHandle.bounding_box 获得元素的边界信息
  3. 在截图中标记出元素:通过PIL(python3使用pillow库)和获取到的元素位置将元素标记出来
  4. 在报告中展示:这里选用的是allure作为测试报告框架,将最终结果保存至allure报告即可
  • 需要注意的是,由截图生成 PIL.Image 对象,和编辑之后保存至allure,都需要通过 io.BytesIO 进行中转

代码示例(以Playwright为例)

from io import BytesIO

import allure
from PIL import Image, ImageDraw
from playwright.sync_api import sync_playwright

def highlight_screenshot(page, element, tips='高亮截图'):
    # 滚动页面将元素移动到视野中
    element.scroll_into_view_if_needed()

    # 获取元素的位置信息
    box = element.bounding_box()
    x, y, width, height = box['x'], box['y'], box['width'], box['height']

    # 获取页面截图,并读取为PIL.Image对象
    png = page.screenshot(type='png')
    img = Image.open(BytesIO(png))

    # 利用元素的位置信息在页面截图中标记出元素
    draw = ImageDraw.Draw(img)
    draw.rectangle((x, y, x + width, y + height), outline='red', width=3)

    # 将标记后的截图保存至allure报告中
    with BytesIO() as output:
        img.save(output, format='png')
        allure.attach(output.getvalue(), tips, allure.attachment_type.PNG)

def test_screenshot():
    with sync_playwright() as pw:
        # 打开百度进行搜索
        browser = pw.chromium.launch()
        page = browser.new_page()
        page.goto('https://www.baidu.com')  # 跳转至百度页面
        page.fill('#kw', 'playwright 选择器')  # 搜索框中输入内容
        page.click('#su')  # 点击搜索按钮

        # 等待搜索结果加载
        page.wait_for_load_state('networkidle')

        # 判断当前页面显示10条搜索结果
        results = page.query_selector_all('h3')
        assert len(results) == 10

        # 将当前页面的搜索结果分别进行截图
        for i, result in enumerate(results):
            highlight_screenshot(page, result, f'搜索结果{i}')

上面以百度搜索为例,将所有搜索结果分别进行截图,最终报告效果如下:

在这里插入图片描述

在这里插入图片描述

您好!对于使用 Playwright、Pytest 和 Allure 进行测试的问题,以下是一些步骤来实现它: 1. 首先,确保您已经安装了 Python 和相应的依赖项。您可以使用以下命令来安装所需的包: ``` pip install playwright pytest allure-pytest ``` 2. 创建一个新的测试文件,比如 `test_example.py`,并导入所需的模块: ```python import pytest from playwright.sync_api import Page ``` 3. 使用 Pytest 的装饰器 `@pytest.fixture` 来创建一个可重用的 Playwright 浏览器实例: ```python @pytest.fixture(scope="session") def browser(): from playwright.sync_api import sync_playwright with sync_playwright() as playwright: browser = playwright.chromium.launch() yield browser browser.close() ``` 4. 使用 `@pytest.fixture` 装饰器来创建一个可重用的页面实例: ```python @pytest.fixture(scope="function") def page(browser): page = browser.new_page() yield page page.close() ``` 5. 编写测试用例,使用 Playwright 的 API 进行操作,并在需要时添加 Allure 报告的注解: ```python @pytest.mark.allure.step("Open Google") def test_example(page: Page): page.goto("https://www.google.com") assert "Google" in page.title() ``` 6. 运行测试并生成 Allure 报告。在命令行中运行以下命令: ``` pytest --alluredir=/path/to/allure_report_directory ``` 7. 打开生成的 Allure 报告: ``` allure serve /path/to/allure_report_directory ``` 这样,您就可以使用 Playwright、Pytest 和 Allure 进行测试了。希望对您有所帮助!如果您有任何问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值