Playwright中Web自動化測試的實現(xiàn)

1. 主流框架的認識

總結(jié):
- 由于Selenium在3.x和4.x兩個版本的迭代中并沒有發(fā)生多大的變化,因此Selenium一統(tǒng)天下的地位可能因新框架的出現(xiàn)而變得不那么穩(wěn)固。
- 后續(xù)的Cypress、TestCafe、Puppeteer被譽為后Selenium時代Web UI自動化的三駕馬車。但是由于這三個框架都是基于JavaScript開發(fā)的,且都不支持Python,所以使用率并沒有很高。
- playwright則是綜合了上述框架的優(yōu)點,提供了很好的體驗,將來可能成為流行的趨勢。
2. Playwright認識
Playwright簡介:
- 2020年,微軟(Microsoft)開源了一個名為Playwright的工具,與Selenium一樣入門簡單,支持多語言(Python、Java、Node.js、.NET),支持多瀏覽器(Chromium、Firefox、Webkit),可跨平臺(Windwos、Linux、Mac OS)
- Playwright同時支持接口自動化和UI自動化,為現(xiàn)代web應用提供了可靠的端到端的測試能力。
Playwright優(yōu)勢:
- 1)自動等待功能讓自動化更可靠
- 2)自動追蹤:可以很方便地配置重試策略,自動的追蹤結(jié)果,以截圖和錄屏的方式進行記錄。
- 3)斷言機制:會根據(jù)網(wǎng)絡環(huán)境進行自動斷言,直到滿足某種條件為止。
- 4)異步執(zhí)行:Playwright基于socket進行雙向通訊,支持同步與異步執(zhí)行兩種方式
- 5)可運行多頁仿真場景:Playwright是通過上下文管理瀏覽器,相當于每一個測試用例都會創(chuàng)建一個獨立的上下文,瀏覽器的上下文其實就是一個全新的瀏覽器,這種方式的好處就是在提速的同時又實現(xiàn)測試與測試之間的隔離,使得測試結(jié)果更加準確,所以可以實現(xiàn)并行執(zhí)行。
- 6)強大的工具集:還我們提供了強大的工具集,例如:腳本錄制工具codegen、腳本編寫以及調(diào)試工具playwright等
3. Playwright環(huán)境搭建
Python環(huán)境:python解釋器+IDE工具,不知道怎么安裝的可參考: python3.4 + pycharm 環(huán)境安裝 + pycharm 使用
Playwright環(huán)境:
安裝Playwright:pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple

安裝內(nèi)置瀏覽器(chromium,firefox,webkit):playwright install

4. Playwright入門實戰(zhàn)
1)腳本錄制
案例1:實現(xiàn)Web ui自動化,打開瀏覽器,訪問測試派,點擊登錄后在進行登錄操作(輸入用戶名、密碼,點擊登錄按鈕)
操作步驟:
- 第一步:pycharm--Terminal中輸入命令:playwright codegen,會自動打開瀏覽器和Playwright Inspector工具,Playwright Inspector工具自動開啟錄制功能
- 第二步:在打開的瀏覽器中進行相關(guān)的操作,如訪問地址、點擊或輸入操作
- 第三步:操作完成后,在Playwright Inspector中點擊Record停止錄制,然后復制代碼即可
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("http://175.178.53.95:8081/")
page.get_by_text("登錄").click()
page.get_by_placeholder("用戶名/郵箱/手機號").click()
page.get_by_placeholder("用戶名/郵箱/手機號").fill("kemi")
page.get_by_placeholder("用戶名/郵箱/手機號").press("Tab")
page.get_by_placeholder("密碼").fill("123456")
page.pause() # 斷點調(diào)試功能
page.get_by_role("button", name="登錄").click()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)2)錄制工具快速定位元素
如果我自己寫代碼,需要定位元素,通過Playwright Inspector工具的Pick locator可以快速獲取元素定位的信息,具體操作如下截圖:

Playwright支持兩大類元素定位方式,包括:
1)get_by方式
get_by_id: 通過元素的 id 屬性來查找元素,例如:element = page.get_by_id("my-id")get_by_name: 通過元素的 name 屬性來查找元素,例如:element = page.get_by_name("my-name")get_by_text: 通過元素的文本內(nèi)容來查找元素,例如:element = page.get_by_text("Submit")get_by_title: 通過元素的 title 屬性來查找元素,例如:element = page.get_by_title("my-title")get_by_placeholder: 通過元素的 placeholder 屬性來查找元素,例如:element = page.get_by_placeholder("my-placeholder")get_by_selector: 通過 CSS 選擇器來查找元素,例如:element = page.get_by_selector("#submit-button")get_by_xpath: 通過 XPath 表達式來查找元素,例如:element = page.get_by_xpath("//div[@class='my-class']")get_by_label: 根據(jù)label屬性值查找元素,類似于HTML中的label標簽和對應的for屬性。get_by_role: 通過角色方式定位元素,例如:element = page.get_by_role("button", name="Submit")
2)page.locator方式
- 通過ID定位元素:使用
page.locator("#element-id")或page.locator('id=element-id')定位。 - 通過CSS選擇器定位元素:使用
page.locator("css=selector")定位。例如:element = page.locator("button#submit-button") - 通過XPath表達式定位元素:使用
page.locator("xpath=expression")定位。例如:element = page.locator("//button[@id='submit-button']") - 通過名稱定位元素:使用
page.locator("name=element-name")定位。 - 通過鏈接文本定位元素:使用
page.locator("text=link-text")定位。 - 通過部分鏈接文本定位元素:使用
page.locator("partial_text=partial-link-text")定位。 - 通過元素屬性定位元素:使用
page.locator("[attribute=value]")定位。 - 通過標簽名定位元素:使用
page.locator("tag=tag-name")定位。
4. Pytest+Allure+Playwright完整項目演示
1)腳本轉(zhuǎn)為測試用例
案例需求:將上面測試派的登錄操作轉(zhuǎn)為測試用例
操作步驟:
- 第一步:pycharm--Terminal中輸入命令:playwright codegen,會自動打開瀏覽器和Playwright Inspector工具,Playwright Inspector工具自動開啟錄制功能
- 第二步:在打開的瀏覽器中進行相關(guān)的操作,如訪問地址、點擊或輸入操作
- 第三步:操作完成后,在Playwright Inspector中點擊Record停止錄制
- 第四步:在Target中選擇Python下的pytest,就會自動化將錄制的代碼轉(zhuǎn)為測試用例,然后復制代碼即可。具體操作如下截圖所示:

代碼如下:
from playwright.sync_api import Page, expect
def test_example(page: Page) -> None:
page.goto("http://175.178.53.95:8081/")
page.get_by_text("登錄").click()
page.get_by_placeholder("用戶名/郵箱/手機號").click()
page.get_by_placeholder("用戶名/郵箱/手機號").fill("kemi")
page.get_by_placeholder("用戶名/郵箱/手機號").press("Tab")
page.get_by_placeholder("密碼").fill("123456")
page.get_by_role("button", name="登錄").click()
執(zhí)行用例前必須先安裝插件,否則會報錯,因為用例只有核心的業(yè)務操作,沒有瀏覽器、上下文、頁面的初始化,裝了插件后會自動做這些初始化的操作,從而執(zhí)行用例不會報錯。命令:pip install pytest-playwright

2)數(shù)據(jù)驅(qū)動
集合pytest的parametrize實現(xiàn)數(shù)據(jù)驅(qū)動
import pytest
from playwright.sync_api import Page, expect
# 測試用例數(shù)據(jù)
case_data = [{'caseid':1,'username':'kemi123', 'password':'kemi123'},
{'caseid':2,'username':'zhangsan', 'password':'123456'},
{'caseid':3,'username':'lisi', 'password':'123456'}]
# 數(shù)據(jù)驅(qū)動
@pytest.mark.parametrize('case', case_data)
def test_example(page: Page,case) -> None:
username = case['username']
password = case['password']
page.goto("http://175.178.53.95:8081/")
page.get_by_text("登錄").click()
page.get_by_placeholder("用戶名/郵箱/手機號").click()
page.get_by_placeholder("用戶名/郵箱/手機號").fill(username)
page.get_by_placeholder("用戶名/郵箱/手機號").press("Tab")
page.get_by_placeholder("密碼").fill(password)
page.get_by_role("button", name="登錄").click()
page.screenshot(path=f"images/login/登錄{case['caseid']}.png") # 截圖保存到指定位置
3)報告顯示
通過pytest執(zhí)行用例后,通過命令生成報告:allure serve outputs/allure,查看報告顯示,截圖如下:

到此這篇關(guān)于Playwright中Web自動化測試的實現(xiàn)的文章就介紹到這了,更多相關(guān)Playwright Web自動化測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch通過訓練結(jié)果的復現(xiàn)設(shè)置隨機種子
這篇文章主要介紹了pytorch通過訓練結(jié)果的復現(xiàn)設(shè)置隨機種子的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Pycharm實現(xiàn)卸載已有版本重新安裝一個新版本
文章主要記錄了卸載舊版PyCharm并重新安裝新版(2019.3),同時配置Anaconda環(huán)境的過程,包括下載安裝、配置環(huán)境、創(chuàng)建新項目以及檢測環(huán)境是否正確等內(nèi)容2026-05-05
Python結(jié)合Free?Spire.XLS?for?Python刪除Excel中的空白行列
在?Excel?數(shù)據(jù)處理場景中,手動刪除大量空行、空列效率極低,下面我們就來看看Python如何結(jié)合Free?Spire.XLS?for?Python實現(xiàn)自動化清除Excel中的空白行列吧2026-02-02

