上一篇已經將playwright的元素定位大法基本介紹的差不多了,但是在Web的UI自動化的測試中,我們通常需要使用一些方法來操作瀏覽器,今天就跟隨學習瞭解一下。這一篇宏哥主要是介紹一下,在自動化測試的時候,我們常見的一些瀏覽器操作有哪些,宏哥將會一一介紹和講解。
在介紹瀏覽器的相關操作之前,宏哥先介紹一下層級,宏哥理解的其實就是操作層級,不對的話,歡迎批評指正。在Playwright中,測試層級為:
Broswer->Context->Page
宏哥首先介紹一下瀏覽器常用的基本操作,然後再通過具體範例給小夥伴或者童鞋們演示一下。既然是瀏覽器的操作,那首先得將瀏覽器啟動(開啟)才能操作,因此首先介紹一下playwright如何啟動瀏覽器。
瀏覽器是通過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
使用browser.new_context() 建立context物件,context之間是相互隔離的,可以理解為輕量級的瀏覽器範例。它不會與其他瀏覽器上下文共用 cookies/快取。
如需要不同使用者登入同一個網頁,不需要建立多個瀏覽器範例,只需要建立多個context即可。
context = browser.new_context(no_viewport=True)
上下文就是瀏覽器的環境,Page是頁面包含了元素、元件的狀態等等,而上下文則包括了對談狀態、Cookie、頁面資訊等。
注意:我們需要設定no_viewport=True,否則將預設按照800*600建立視口,你會發現,視窗很大,但是網頁很小。
使用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" 同站策略,可選
在context上新建一個頁面物件然後呼叫goto方法即可。
page = context.new_page() page.goto("https://www.baidu.com")
page.reload()
page.go_back()
page.go_forward()
前邊宏哥提到可以通過設定 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()
我們可以通過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()
先關閉上下文,再退出瀏覽器。
關閉上下文時,上下文所屬的頁面也會一起關閉。
browser_context.close()
browser.close()
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)
以度娘為例,首先啟動瀏覽器,然後再設定瀏覽器的大小。查詢「北京宏哥」後,重新整理頁面執行回退到百度首頁,然後有執行前進進入到搜尋「北京宏哥」頁面,最後退出瀏覽器。
按照上邊的步驟進行程式碼設計,如下圖所示:
# coding=utf-8