《最新出爐》系列入門篇-Python+Playwright自動化測試-7-瀏覽器的相關操作

2023-07-14 18:01:01

1.簡介

上一篇已經將playwright的元素定位大法基本介紹的差不多了,但是在Web的UI自動化的測試中,我們通常需要使用一些方法來操作瀏覽器,今天就跟隨學習瞭解一下。這一篇宏哥主要是介紹一下,在自動化測試的時候,我們常見的一些瀏覽器操作有哪些,宏哥將會一一介紹和講解。

2.層級

在介紹瀏覽器的相關操作之前,宏哥先介紹一下層級,宏哥理解的其實就是操作層級,不對的話,歡迎批評指正。在Playwright中,測試層級為:

Broswer->Context->Page

3.瀏覽器操作

宏哥首先介紹一下瀏覽器常用的基本操作,然後再通過具體範例給小夥伴或者童鞋們演示一下。既然是瀏覽器的操作,那首先得將瀏覽器啟動(開啟)才能操作,因此首先介紹一下playwright如何啟動瀏覽器。

3.1啟動瀏覽器

瀏覽器是通過browser_type.launch()建立的。

browser = playwright.chromium.launch(headless=False, args=['--start-maximized'])

上面啟動了一個瀏覽器,開啟有頭模式,並且通過args引數向chrome傳遞開啟時視窗最大化。

開啟瀏覽器格式為playwright.browser_type.launch (...args),browser_type為瀏覽器型別,args為傳遞給瀏覽器的引數,這個可以參考瀏覽器的官方檔案。

忽略HTTPS告警:加入如下引數即可。

'--ignore-certificate-errors'

其他更多詳細內容您可以參考官方檔案,檢視完整的API參數列:BrowserType | Playwright Python

3.2啟動上下文

使用browser.new_context() 建立context物件,context之間是相互隔離的,可以理解為輕量級的瀏覽器範例。它不會與其他瀏覽器上下文共用 cookies/快取。
如需要不同使用者登入同一個網頁,不需要建立多個瀏覽器範例,只需要建立多個context即可。

context = browser.new_context(no_viewport=True)

上下文就是瀏覽器的環境,Page是頁面包含了元素、元件的狀態等等,而上下文則包括了對談狀態、Cookie、頁面資訊等。

注意:我們需要設定no_viewport=True,否則將預設按照800*600建立視口,你會發現,視窗很大,但是網頁很小。

3.3為上下文新增cookie

使用add_cookies()為上下文新增cookie。

browser_context.add_cookies([cookie_object1, cookie_object2])

引數為字典列表,每個cookie字典有如下欄位,其中url或者域名、path雖然都是可選的,但必須要有一個。 

name 名稱

value 值

url 可選

domain 域名

path 路徑

expires 浮點數,過期時間,Unix時間(精確到秒)可選

httpOnly 是否為httpOnly,可選

secure 安全模式,可選

sameSite "Strict"|"Lax"|"None" 同站策略,可選

3.4存取頁面

在context上新建一個頁面物件然後呼叫goto方法即可。

page = context.new_page()
page.goto("https://www.baidu.com")

3.5重新整理、前進和後退

page.reload()
page.go_back()
page.go_forward()

3.6瀏覽器視窗最大化

前邊宏哥提到可以通過設定 args 引數 --start-maximized 並且設定 no_viewport=True

from playwright.sync_api import sync_playwright  
  
with sync_playwright() as p:  
    browser = p.chromium.launch(  
        headless=False,#關閉無頭模式  
        args=['--start-maximized']  #設定谷歌瀏覽器引數  
    )  
    context = browser.new_context(no_viewport=True)  #設定no_viewport引數  
    page = context.new_page()  
    page.goto("https://www.baidu.com")  
    page.pause()

3.7指定瀏覽器視窗的大小

我們可以通過viewport指定視窗大小。已知問題:瀏覽器不會貼合到螢幕左側。

viewport 可以在 new_context 或者 new_page 方法中設定,都可生效。

from playwright.sync_api import sync_playwright  
  
with sync_playwright() as p :  
    browser  = p.chromium.launch(  
        headless=False,  
    )  
    context = browser.new_context(  
        viewport={'width': 1920, 'height': 1080},  
    )  
    page = context.new_page()  
    page.goto("https://www.baidu.com")  
    page.pause()

3.8退出瀏覽器

先關閉上下文,再退出瀏覽器。

關閉上下文時,上下文所屬的頁面也會一起關閉。

browser_context.close()
browser.close()

3.9以特定裝置佈局開啟瀏覽器

from playwright.sync_api import sync_playwright
 
def run(playwright):
    iphone_13 = playwright.devices['iPhone 13']
    browser = playwright.webkit.launch(headless=False)
    context = browser.new_context(
        **iphone_13,
    )
 
with sync_playwright() as playwright:
    run(playwright)

4.專案實戰

以度娘為例,首先啟動瀏覽器,然後再設定瀏覽器的大小。查詢「北京宏哥」後,重新整理頁面執行回退到百度首頁,然後有執行前進進入到搜尋「北京宏哥」頁面,最後退出瀏覽器。

4.1程式碼設計

按照上邊的步驟進行程式碼設計,如下圖所示:

4.2參考程式碼

# coding=utf-8