上一篇宏哥已經將Python+Playwright的環境搭建好了,而且也簡單的演示了一下三款瀏覽器的啟動和關閉,是不是很簡單啊。今天主要是把一篇的中的程式碼進行一次詳細的註釋,然後說一下playwright的API和其他相關知識點。那麼首先將上一篇中的程式碼進行一下詳細的解釋。
'''預設為無頭瀏覽器方式啟動 ''' browser = p.webkit.launch(headless=False)
一般來說,一個page對應一個瀏覽器索引標籤,而Page物件的作用在於和頁面的內容進行互動,以及導航和載入新的頁面。這點和selenium有點像,也可以說是比selenium劃分的更加細緻精確。
page = browser.new_page()
其他的是一些選擇器和操作方法,在後續的文章中宏哥都會一一的介紹到。
Playwright支援同步和非同步兩種API,使用非同步API需要匯入asyncio庫,它是一個可以用來實現Python協程的庫,更詳細介紹可參考Python協程 。我們可以根據自己的偏好選擇適合的模式。
同步操作方式:在程式碼執行時,程式會阻塞等待每個操作執行的結果,直到該操作執行結束才能繼續執行後面的程式碼。同步程式碼容易理解和編寫,但如果在網路請求等 I/O 操作時會造成大量的等待時間,影響程式的執行效率。
非同步操作方式:在程式碼執行時,當遇到需要等待操作執行的時候,程式不會被阻塞,而是繼續執行其他的程式碼。當該操作執行的結果返回時,程式會自動跳回去接著執行之前被暫停的程式碼。非同步操作雖然需要一定的學習成本,但可以提升程式的執行效率。
· 直接順序執行測試邏輯,直到完成。
· 使用上下文管理器或啟動/關閉方法控制瀏覽器生命週期。
· 簡單易用,適合同步測試場景。
· 但無法實現非同步或重疊的測試邏輯。
· 利用asyncio模組以非同步非阻塞方式執行測試邏輯。
· 瀏覽器啟動/關閉和大多數Playwright API也是非同步的,需要await。
· 可以實現複雜的非同步或重疊測試邏輯。
· 但較難偵錯,有一定學習成本。
同步:傳送一個請求,等待返回,然後再傳送下一個請求。
非同步:傳送一個請求,不等待返回,隨時可以再傳送下一個請求。
宏哥這裡假設一共有2條測試用例,用例1步驟如下:
1)chrome瀏覽器開啟百度
2)搜尋方塊輸入「test」
3)點選百度一下搜尋
4)點選搜尋結果的第2頁
用例2步驟:
1)chrome瀏覽器開啟搜狗搜尋
2)搜尋方塊輸入「test」
3)點選搜狗搜尋
4)點選搜尋結果的第2頁
這裡我們使用sync_playwright上下文管理器同步啟動Playwright,然後編寫同步測試邏輯。
根據上述測試用例編寫自動化測試指令碼程式碼如下:
# coding=utf-8