01、簡介
軟開源自動化測試工具Playwright,支持主流瀏覽器,包括:Chrome、Firefox、Safari 等,同時支持以無頭模式、有頭模式運行,并提供了同步、異步的 API,可以結合主流測試框架使用,并且支持瀏覽器端的自動化腳本錄制等功能。
![]()
特點:
· 跨瀏覽器:Playwright 支持所有現代渲染引擎,包括Chromium、WebKit 和 Firefox;
· 跨平臺:在 Windows、Linux 和 MacOS 上進行本地或 CI、無頭或有頭測試;
· 跨語言:在 TypeScript、JavaScript、Python、.NET、Java 中使用Playwright API;
· 測試移動網絡:適用于 Android 和 Mobile Safari 的 Google Chrome 原生移動仿真。相同的渲染引擎適用于您的桌面和云端。
通俗的講: 就是一款主流的自動化測試工具,可以跨平臺、跨語言、開源、支持分布式、擁有成熟的社區及學習文檔,主要用于接口和web自動化測試。
![]()
02、安裝
1.Java 開發環境搭建
首先需要明確的是Java環境是使用maven管理項目的,所以我們只需用在項目中找到對應的pom文件在其中添加如下內容:
com.microsoft.playwright
playwright
1.25.0
就可以自動導入playwright。
Ps:因為maven的中央倉庫是外網地址,下載很慢需耐心等待,或者在修改鏡像站,改為國內鏡像。
添加demo.java內容如下:
package org.example;import com.microsoft.playwright.*;publicclassExample{publicstaticvoidmain(String[] args){try (Playwright playwright = Playwright.create()) {Browser browser = playwright.chromium().launch();Page page = browser.newPage(); page.navigate("https://www.cnblogs.com/longronglang"); System.out.println(page.title());}}}
運行這個類之后會下載下載 Playwright 包并安裝適用于 Chromium、Firefox 和 WebKit 的瀏覽器二進制文件,如下所示:
2.Python開發環境搭建(網上教程很多此處不做過多說明)
1. 安裝Playwright依賴庫(Playwright支持Async\Await語法,故需要Python3.7+)
pip install playwright
2. 安裝Chromium、Firefox、WebKit等瀏覽器的驅動文件(內置瀏覽器)
python -m playwright install
03、腳本錄制
此章主要是介紹如何錄制腳本,提供給需要使用錄制屏幕的人,若是不喜歡覺得自己手寫更方便的同學可以跳過此章。
1.錄制環境安裝
如同常見的自動化測試工具一樣,playwright同樣支持屏幕錄制并生成腳本。因為錄屏時需要node環境,所以請提前安裝。不會的同學請自行度娘,本文不做詳述。
確認node環境及版本:
node -v
![]()
安裝:
npm init -y
npm i -D @playwright/test
![]()
2.錄制
錄制是不需要寫代碼的,只需要啟動瀏覽器,playwright就會幫我們生成腳本代碼。
輸入如下命令即可啟動,開啟錄制模式:
npx playwright codegen https://www.baidu.com(開啟錄屏模式)
Npx playwright open --viewport-size 1920,1080 https://www.baidu.com
Ps: 上文中的url 是我們需要錄制的網站地址,請根據實際使用情況自行配置。
![]()
同樣playwright是支持多語言的,我們可以在錄制界面隨意切換自己需要的語言,本文以Java為例,其余不做演示。
![]()
接下來我們只需要在瀏覽器中執行相關操作,playwright就會把我們所有的操作記錄下來。
下圖中為在首頁的輸入框中輸入playwright并查詢。
![]()
當操作完成之后,我們點擊playwright的停止和復制就可以得到錄制好的腳本
![]()
我們把復制好的腳本粘貼到編輯器中,點擊運行該腳本,通過運行后就證明我們錄制的腳本沒有問題,可以保存。如果有,則通過調整代碼或者推倒重新錄制即可解決。
至此錄制環境安裝和腳本錄制完成。
3.調試
如圖是playwright inspectior,我們已經和它見過一次面了,大家應該也不陌生。接下來詳細的為大家介紹一下它,它叫playwright inspectior是playwright框架自帶的GUI工具,可以幫助我們調試腳本
![]()
3.1 如何啟動playwright inspectior
在腳本中添加page.pause()方法即可啟動.
![]()
Ps: 其他方法本文不做推薦,后期請自行研究。
3.2. 界面介紹
(1)工具欄介紹
![]()
(2)元素欄介紹
如圖所示,當我們不確定頁面某個元素位置怎么獲取時,可點擊檢測器,然后在頁面上點擊該元素,即可在輸入框中展示該元素。
也可以配合開發者小工具(F12)檢測你的元素否正確。
![]()
3.3. 如何調試
當腳本出現問題之后,我們就可以使用playwright inspectior做調試
第一步:在你的腳本代碼中添加page.pause()方法,運行腳本。
第二步:等待playwright inspectior成功啟動之后,我們就能使用工具欄 播放、停止、逐步播放來確定問題所在
第三步:當確定時元素位置錯誤,我們就能使用元素檢查器來確定正確的元素位置。
04、常用方法介紹
1.創建瀏覽器對象
![]()
.chromium().launch()方法就是指創建一個谷歌瀏覽器,同樣創建火狐就是.firefox().launch()
.setHeadless(false)方法是指在創建瀏覽器的時候,選擇無頭瀏覽器(true)還是帶頭瀏覽器(false)。
無頭瀏覽器:后臺運行,不在顯示器顯示腳本操作
有頭瀏覽器:在顯示器上展示腳本所有操作
2.創建瀏覽器上下文
瀏覽器上下文對象是瀏覽器實例中一個類似于隱身模式的會話,簡單說就是該上下文資源是完全獨立的,與其他的上下文互不干擾,所以在自動化測試中,可以對每一個測試用例都單獨開一個瀏覽器上下文。這對于多用戶,多場景的測試非常有用。
3.創建頁面
page就是瀏覽器中的標簽頁,一個page對象就可以當前頁面內容交互
![]()
??轉崗軟件測試/野路子技能提升
??想了解更多漲薪技能提升方法
??可以到我的個人號:atstudy-js
即可加入領取 ??????
轉行、入門、提升、需要的各種干貨資料
內含AI測試、 車載測試、AI大模型開發、BI數據分析、銀行測試、游戲測試、AIGC
4.常見頁面操作事件
這部分主要演示的常見頁面操作,例如:文本輸入、點擊、鍵盤鍵入、上傳文件、聚焦等等
1、輸入操作
語法:Locator.fill(value)
使用場景:文本框、日期/時間、日歷控件等輸入框
page.locator("#kw").fill("playwright");
2、點擊操作
語法:Locator.click()
適用場景:單選框、復選框、按鈕控件、常見可點擊控件等等!
page.locator("#kw").click();
3、單選框及復選框操作
語法: Locator.setChecked(checked)
適用場景: 單選框、復選框
//單選款 (選中,已選中狀態下無效) page.locator(".Volvo").setChecked(true);page.locator(".Volvo").check();System.out.println(page.locator(".Volvo").isChecked());//復選框(選中,已選中狀態下無效) page.locator("#checkbox [type='checkbox']:nth-child(7)").check();page.locator("#checkbox [type='checkbox']:nth-child(7)").setChecked(true);
4、下拉控件操作
語法:Locator.selectOption(values[, options])
適用場景:下拉框操作
//通過value值選擇page.locator("[name='select']").selectOption("opel");//通過可見文本選擇page.locator("[name='select']").selectOption(new SelectOption().setLabel("Audi"));5、鼠標事件
5、鼠標事件
語法:詳見案例
適用場景:常見鼠標點擊事件
//常規單擊page.locator("#mouse2").click();//雙擊page.locator("#mouse3").dblclick();//右鍵單擊page.locator("#mouse5").click(new Locator.ClickOptions().setButton(MouseButton.RIGHT));//按住Shift鍵并單擊page.locator("#mouse2").click(new Locator.ClickOptions().setModifiers(Arrays.asList(KeyboardModifier.SHIFT)));//懸停在元素上page.locator("#mouse1").hover();//單擊左上角page.locator("#mouse1").click(new Locator.ClickOptions().setPosition(0, 0));//強制點擊page.locator("#mouse2").click(new Locator.ClickOptions().setForce(true));//調度點擊事件來觸發點擊page.locator("#mouse2").dispatchEvent("click");
6、模擬鍵盤輸入字符操作
語法:Locator.type(value)
使用場景:模擬鍵盤輸入字符
ps:大多數時候,Page.fill()可以滿足要求。如不能輸入時,可以考慮鍵入字符操作。
page.locator("#user").type("playwright");
7、單元素鍵盤事件操作
語法:Locator.press(鍵盤事件)
使用場景:定位元素并產生單個鍵盤事件
//模擬Ctrl+A 全選操作page.locator("#user").press("Control+A");//模擬回車操作 == > 跳轉到百度頁面page.locator(".baidu").press("Enter");
8、上傳文件
語法:Locator.setInputFiles()
使用場景:上傳一個或多個文件
//上傳一個文件page.locator("#load").setInputFiles(Paths.get("demo.md"));// 上傳多個文件page.locator("#load").setInputFiles(new Path[]{Paths.get("pom.xml"), Paths.get("demo.md")});
9、拖拽操作
語法:Locator.dragTo()
使用場景:常見元素拖動操作
// 拖拽元素page.locator("#A").dragTo(page.locator(".container ul:nth-of-type(2)"));
10、懸浮操作
語法:Locator.hover()
使用場景:常見元素懸浮操作
//懸浮page.locator("#action").hover();
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.