引言
随着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 可以方便地管理测试环境的初始化和清理工作。这样,我们就能够专注于测试逻辑本身,而不是测试环境的搭建。