Playwright+Python+Pytest:基础方法二次封装简化及链式调用

引言

随着Web应用的日益复杂化,自动化测试成为了确保软件质量的关键环节。Playwright 是一个强大的自动化库,它支持在 Chromium、Firefox 和 WebKit 中运行自动化脚本。本文将介绍如何使用 Playwright 的 Python 同步 API 来简化点击和填充操作,并展示如何在 pytest 测试框架中应用这些方法。

Playwright 简介

Playwright 允许开发者自动化几乎所有的网页操作,包括但不限于点击、填写表单、导航等。它支持跨浏览器测试,并且能够处理单页应用(SPA)中的动态内容。

环境准备

在开始之前,请确保你已经安装了 Python 和 pip。

安装 Playwright

pip install playwright

安装内置浏览器

playwright install 

编写 PlaywrightWrapper 类

为了简化 Playwright 的使用,我们可以编写一个封装类 PlaywrightWrapper。这个类将提供启动浏览器、打开新页面、导航、定位元素、点击和填充表单的方法。

# wrapper.py
from playwright.sync_api import sync_playwright


class PlaywrightWrapper:
    def __init__(self):
        self.playwright = sync_playwright().start()
        self.browser = None
        self.page = None

    def launch_browser(self, browser_type="chromium", headless=False):
        self.browser = self.playwright[browser_type].launch(headless=headless)
        return self

    def new_page(self):
        self.page = self.browser.new_page()
        return self

    def navigate(self, url: str):
        self.page.goto(url)
        return self

    def locator(self, selector: str):
        return self.page.locator(selector)

    def click(self, selector: str):
        self.locator(selector).click()
        return self

    def fill(self, selector: str, value: str):
        self.locator(selector).fill(value)
        return self

    def close(self):
        if self.browser:
            self.browser.close()
        self.playwright.stop()
        return self

使用 pytest 进行测试

现在我们已经有了 PlaywrightWrapper 类,接下来我们将展示如何在 pytest 测试框架中使用它。

首先,pytest fixture 来初始化、打开页面和关闭自动化环境:

# conftest.py
import pytest
from common.wrapper import PlaywrightWrapper

# 定义page fixture
@pytest.fixture(scope="session")
def page():
    page = PlaywrightWrapper()
    yield page
    page.close()
    
# 打开页面fixture
@pytest.fixture(scope="session", autouse=True)
def open_page(page):
    page.launch_browser().new_page().navigate("https://www.baidu.com/")

然后,编写测试用例:

# test_case.py
def test_case(page):
    page.fill("input#kw", "**** blues_C").click("[type='submit']").click("a >> text='blues_C' >> nth=0").wait_for_timeout(20)

最后,运行测试:

pytest .\test_case.py 

在这里插入图片描述

结语

通过封装 Playwright 的操作,我们能够编写出更简洁、更一致的自动化测试脚本。使用 pytest fixture 可以方便地管理测试环境的初始化和清理工作。这样,我们就能够专注于测试逻辑本身,而不是测试环境的搭建。

上一篇:【C语言】轻松拿捏-联合体-一、联合体类型的声明


下一篇:爬虫实现思路