相信80%的UI自動化測試工程師在進行崗位面試的時候都會重點講解自己會使用哪些工具儡蔓,例如cypress 、selenium 疼邀、playwright等等喂江。其實這只是初級段位,如果大家想談得再高大上一些旁振,就可以談談這些工具與瀏覽器talk的原理了获询,絕對會得到面試官的重視!目前主流主動化測試工具與瀏覽器溝通的原理主要包括:Native拐袜、Webdriver以及CDP吉嚣,使用這三種方式的典型代表工具分別是:cypress 、selenium 和playwright蹬铺。今天我就對此進行總結(jié):
Native(JavaScript loaded in the same browser application))
測試代碼和web程序在相同的生命周期里執(zhí)行尝哆,他們共享進程和domain。Cypress測試代碼和應用程序均運行在由Cypress全權(quán)控制的瀏覽器中甜攀,且它們運行在同一個Domain下的不同iframe內(nèi)秋泄,所以Cypress的測試代碼可以直接操作DOM,Windows Objects甚至Local Storages而無須通過網(wǎng)絡訪問规阀,這就是Cypress可以運行的更快的原因恒序。Native 方式與Webdriver和CDP運行原理完全不同,后面就不再對Native 進行詳細介紹了姥敛。
Webdriver
WebDriver協(xié)議旨在從用戶的角度驅(qū)動瀏覽器奸焙。它本身是http協(xié)議,數(shù)據(jù)傳輸使用json彤敛,提供了提供一系列遠程控制接口与帆,抽象出與應用程序的常見交互(例如,導航墨榄、單擊或讀取元素的狀態(tài))玄糟。由于它是一個Web標準,它在所有主要瀏覽器供應商中得到了很好的支持袄秩,并且還被用作使用Appium的移動自動化的底層協(xié)議阵翎。要使用WebDriver協(xié)議,我們需要一個代理服務器(即不同的瀏覽器提供各自的驅(qū)動)來翻譯所有命令并在目標環(huán)境(即瀏覽器或移動應用程序)中執(zhí)行它們之剧。
Chrome – ChromeDriver
Firefox – Geckodriver
Microsoft Edge – Edge Driver
Internet Explorer – InternetExplorerDriver
Safari – SafariDriver
Chrome DevTools Protocol
ChromeDevTools Protocol簡稱CDP郭卫,它允許對Chromium,Chrome和其他基于Blink的瀏覽器進行檢測背稼,探測贰军,調(diào)試和配置。許多現(xiàn)有項目目前使用該協(xié)議蟹肘。 Chrome的開發(fā)者工具就是使用此協(xié)議词疼,該團隊也負責維護其API俯树。Chrome瀏覽器可以遠程調(diào)試的方式啟動, 實際上在瀏覽器內(nèi)部啟動了一個采用DevTools的服務器, 任何符合該協(xié)議的websoket通訊都可以被Chrome響應,這樣你可以向Chrome發(fā)送命令, 執(zhí)行操作, 實現(xiàn)一些自動化瀏覽器的操作,目前越來越多的瀏覽器支持了CDP協(xié)議贰盗,除了chrome许饿,還包括:edge、firefox舵盈、safri陋率。
Webdriver與CDP比較
WebDriver協(xié)議與CDP協(xié)議之間的主要區(qū)別在于,WebDriver協(xié)議需要一個中間人书释,例如瀏覽器驅(qū)動程序(例如chrome-driver)翘贮,該服務器位于自動化腳本和啟用瀏覽器控制的瀏覽器之間;使用CDP協(xié)議可以直接來控制瀏覽器爆惧。
下面對支持webderiver協(xié)議和cdp協(xié)議的自動化測試工具進行一下比較
大家可以看到從selenium webdriver4 和Cypress v7開始也已經(jīng)支持cdp協(xié)議了狸页。
最后的總結(jié):魚和熊掌不可兼得
從一個更高級別的角度來看,測試越接近瀏覽器扯再,測試就越穩(wěn)定芍耘,但對跨瀏覽器的支持非常少。另一方面熄阻,我們的測試和瀏覽器之間的抽象程度越高斋竞,測試就會變得越不穩(wěn)定,但也會得到更多的跨瀏覽器支持秃殉。