轉載請注明出處??
作者:測驗蔡坨坨
原文鏈接:caituotuo.top/4bedb73c.html
你好,我是測驗蔡坨坨,
說到WebUI自動化測驗,首當其沖的當屬Selenium,在很長的一段時間內,Selenium統治著Web自動化,Selenium其實經歷了四個階段,從2006年發布的Selenium 1.0到最新的Selenium 4.8.3,
-
2006年,Selenium 1.0發布
Selenium 1.0包含Selenium IDE(瀏覽器插件,可以幫助我們錄制并生成腳本,對于不會代碼的同學來說,它是一個非常好的開始,但現在基本被淘汰了)、Selenium Grid(分布式,將一套腳本分發到不同的機器上執行,功能非常強大,現在還在使用)、Selenium RC(腳本控制瀏覽器實作自動化的原理,但是它的實作并不完善,到Selenium 2.0時代被WebDriver替代),
同年,Google工程師Simon Stewart發起了一個名為WebDriver的專案,它也是一個自動化測驗工具,彼時剛剛起步,后來它也成為Selenium的競品之一,
-
2009年,Selenium 2.0發布
2009年,在Google測驗自動化會議上,Selenium和WebDriver兩個團隊的開發人員在溝通后決定合并這兩個專案,新專案被命名為Selenium Web Driver,也就是Selenium 2.0,很多人接觸Selenium,也是從Selenium 2.0開始的,WebDriver的實作原理其實就是在
Web瀏覽器和我們的腳本之間有一個WebDriver,通過WebDriver協議去驅動并操作瀏覽器(具體實作+原始碼決議可參考往期文章「Selenium底層邏輯原始碼決議」),WebDriver的作者是這樣解釋二者合并的原因:“一方面WebDriver解決了Selenium存在的缺點(例如:可以繞過JavaScript沙箱,WebDriver有出色的API),另一方面Selenium解決了WebDriver存在的問題,還有就是Selenium主要貢獻者和WebDriver的作者都認為合并專案是為用戶提供最優秀框架的最佳途徑,”
Selenium 2.x(WebDriver)真正興起是在2014年開始,到2016年左右成為Web自動化最熱門的框架,幾乎談及Web自動化,那就是Selenium,它不僅在Web自動化測驗領域很火,在爬蟲領域也是非常熱門,
-
2016年,Selenium 3.0發布
這個版本并沒有引入新的工具,主要是加強了對瀏覽器的支持,
完全移除了Selenium RC;WebDriver暴露一個供瀏覽器接入的API,通過各瀏覽器廠商提供的Driver來接入;將內置的Firefox Driver剔除;支持Firefox通過GRCKO Driver來接入Selenium;通過Apple提供的Safari Driver來接入Safari;通過Edge Driver支持IE接入,
所以,3.x和2.x其實沒有太大的區別,
-
2021年,Selenium 4.0發布
在Selenium 3.x中,與瀏覽器的通信基于JSON-wire協議,因此Selenium需要對API進行編解碼,而Selenium 4遵循W3C標準協議,Driver與瀏覽器之間通信的標準化使得它們可以直接通信,
除此之外,Selenium 4還做了一些其他的改動,可參考往期文章「Selenium 4 有哪些不一樣?」,
由于Selenium在3.x和4.x兩個版本的迭代中并沒有發生多大的變化,因此Selenium一統天下的地位也由于新框架的出現變得不那么穩固,
2020年左右出現的Cypress、TestCafe、Puppeteer,在技術雷達中被譽為后Selenium時代Web UI自動化的三駕馬車,但是由于這三個框架都是基于JavaScript開發的,所以就需要測驗人員熟悉JavaScript,并且都不支持Python,所以使用率并沒有很高,
Playwright簡介
2020年,微軟(Microsoft)開源了一個名為Playwright的工具,與Selenium一樣入門簡單,支持多語言(Python、Java、Node.js、.NET),大廠出品,必屬精品,它剛出現的時候,并沒有多火,隨著時間的推移,到2022年左右,Playwright已經被更多的人注意到并接受它,甚至比Selenium更好更強大,
Playwright是一款定位于端到端(End-to-End,端到端就是用于測驗整個應用程式的流程是否符合預期的測驗技術,模擬用戶真實使用場景,為實作這一目標,該系統通常被視為黑盒子,也就是所謂的黑盒測驗,主要通過GUI和API等公共介面對其進行操作)的測驗工具,
雖然目前在國內Web自動化測驗的扛把子還是Selenium,但是國外已經有很多企業都在使用Playwright,比如:Adobe、微軟自帶的某些專案(Visual Studio Code、Bing)、Disney Hostar等,
既然在市面上已經有非常成熟好用的Selenium框架,并且在持續的更新,社群也十分活躍,微軟為什么還要整一個額外的自動化測驗工具出來呢?
兩個工具的定位不同,由于Playwright是后出來的工具,所以在一些細節方面會處理得更好,
-
跨瀏覽器
雖然Selenium提供了幾乎所有瀏覽器的兼容和支持,但是還需要額外下載對應的瀏覽器版本的驅動,否則Selenium WebDriver可能就無法啟動,而Playwright內置了各種瀏覽器以及瀏覽器驅動(支持所有現代渲染引擎,包括Chromium、Firefox和WebKit),并且不需要額外的升級和管理,這樣一來整個自動化測驗專案將會更加穩定,
-
自動等待
在使用Selenium的時候,我們通常會根據測驗需求,在代碼中加入各種等待,而在Playwright中沒有所謂的隱式等待,而顯示等待也已經封裝好了,直接呼叫即可,
-
Web優先斷言
Playwright會根據網路環境進行自動斷言,直到滿足某種條件為止,
-
追蹤
Playwright可以很方便地配置重試策略,并進行自動的追蹤結果,以截圖和錄屏的方式進行記錄,
-
并行執行
在Selenium中,執行測驗用例是單執行緒的,但是在Playwright中,由于運行機制不一樣(Selenium的指令發送是通過http協議,而Playwright則是使用socket協議;Playwright是通過背景關系管理瀏覽器,相當于每一個測驗用例都會創建一個獨立的背景關系,瀏覽器的背景關系其實就是一個全新的瀏覽器,這種方式的好處就是在提速的同時又實作測驗與測驗之間的隔離,使得測驗結果更加準確),所以可以實作并行執行,
-
強大的工具集
Playwright給我們提供了強大的工具集,例如:腳本錄制工具codegen、腳本撰寫以及除錯工具playwright等,
Playwright初體驗
以Python語言為例,撰寫第一個Playwright腳本,
PS:Playwright 需要 Python >=3.7 版本
安裝playwright
pip install playwright

安裝內置瀏覽器
使用以下命令安裝Playwright自帶的各種瀏覽器:
playwright install
由于安裝的內容比較多,所以這一步需要花費一點時間,

第一個Playwright腳本
1. 使用with方式啟動
# author: 測驗蔡坨坨
# datetime: 2023/4/8 2:18
# function: 第一個playwright腳本,使用with寫法
from playwright.sync_api import sync_playwright, expect
def run(playwright):
chromium = playwright.chromium # or "firefox" or "webkit".
browser = chromium.launch(headless=False) # headless表示是否使用無頭瀏覽器(也就是無GUI模式)
page = browser.new_page()
page.goto("https://caituotuo.top")
# other actions...
print(page.title())
browser.close()
with sync_playwright() as playwright:
run(playwright)
# 這里使用的是with方法,Python中的with方法可以很方便處理一些需要提前設定,事后需要清理的作業
# playwright正好有背景關系處理,所以使用with寫法會使代碼更加簡潔
# 比如:
# with open("/caituotuo.txt") as f:
# f.read()
#
# 非with方式可能存在問題:1.可能忘記關閉檔案句柄 2.檔案讀取資料時發生例外,但是沒有進行任何處理
# f = open("/caituotuo.txt")
# data = https://www.cnblogs.com/caituotuo/archive/2023/04/15/f.read()
# f.close()
2. 使用start()方式啟動
# author: 測驗蔡坨坨
# datetime: 2023/4/8 2:20
# function: 使用start()寫法,直接實體化playwright同步方法
from playwright.sync_api import sync_playwright
playwright = sync_playwright().start()
chromium = playwright.chromium # or "firefox" or "webkit".
browser = chromium.launch(headless=False) # headless表示是否使用無頭瀏覽器(也就是無GUI模式)
page = browser.new_page()
page.goto("https://caituotuo.top")
# other actions...
print(page.title())
browser.close()
總結
Selenium和Playwright都是流行的自動化測驗工具,都擁有豐富的功能和API,都可以用于Web應用程式的自動化測驗,選擇一個測驗框架,必須考慮日常作業中的場景以及當前的團隊,進而選擇合適的自動化測驗工具來進行測驗,而不是使用一個新的花里胡哨的框架,然后一段時間后因為它沒有滿足我們的需求而拋棄它,
當然,同時掌握多種技術堆疊再好不過了,正所謂“兵來將擋,水來土掩”,無論企業中選擇哪種工具,都可以快速上手,也是自身能力的體現,
最重要的是要行動起來,多寫多練,榷訓月累,自然會如魚得水,真正把自動化測驗在企業中落地,帶來對應的效率和質量保障方面的提升,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/550207.html
標籤:其他
