1.簡介
瀏覽器多窗口的切換問題相比大家不會陌生吧,之前宏哥在java+selenium系列文章中就有介紹過。大致步驟就是:使用selenium進行瀏覽器的多個窗口切換測試,如果我們打開了多個網頁,進行網頁切換時,我們需要先獲取各個頁面的句柄,通過句柄來區分各個頁面,然後使用switch_to.window()實現切換,這樣的操作比較麻煩,而且宏哥在介紹和講解的時候,也寫了好幾篇相關的文章。反過來今天我們所學的playwright來處理瀏覽器多窗口切換卻比selenium更爲簡單快捷。下邊宏哥就給小夥伴們或者童鞋們介紹一下playwrigh如何處理瀏覽器多個窗口的切換方法。
2.測試場景
我們以訪問百度爲例,百度首頁有多個選項,新聞,hao123網址導航,貼吧等多個選項,我們點擊不同的選項,就會打開不同的新標籤頁。當打開多個標籤頁後, 如何切換到自己想要的頁面上操作。
思路:我們可以通過腳本,輸出百度首頁各頁面的標題,通過context.pages
可以獲取到所有的page對象,每一個page對象就代表一個標籤頁實例。
2.1代碼設計
2.2參考代碼
# coding=utf-8🔥 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 # 2.註釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2023-07-13 @author: 北京-宏哥 QQ交流羣:705269076 公衆號:北京宏哥 Project: 《最新出爐》系列入門篇-Python+Playwright自動化測試-14-playwright處理瀏覽器多窗口切換 ''' # 3.導入模塊 from playwright.sync_api import sync_playwright with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto('https://www.baidu.com') # 點開多個標籤頁 for link in page.locator('#s-top-left>a').all(): link.click() # 遍歷page對象 for i in context.pages: print(i.title()) browser.close()
2.3運行代碼
1.運行代碼,右鍵Run'Test',控制檯輸出,如下圖所示:
2.運行代碼後電腦端的瀏覽器的動作。如下圖所示:
3.多窗口切換方法
3.1Title切換
前邊已經將所有的標籤的title都循環出來了,我們只要切換到我們需要操作的title標籤頁即可。
3.1.1代碼設計
3.1.2參考代碼
# coding=utf-8🔥 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 # 2.註釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2023-07-13 @author: 北京-宏哥 QQ交流羣:705269076 公衆號:北京宏哥 Project: 《最新出爐》系列入門篇-Python+Playwright自動化測試-14-playwright處理瀏覽器多窗口切換 ''' # 3.導入模塊 from playwright.sync_api import sync_playwright def switch_to_page(context, title=None): """切換到指定title 名稱的標籤頁""" for item_page in context.pages: if title: if title in item_page.title(): # 激活當前選項卡 item_page.bring_to_front() return item_page else: print("not found title") return context.pages[0] with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto('https://www.baidu.com') # 點開多個標籤頁 for link in page.locator('#s-top-left>a').all(): link.click() # 打開多個tab 標籤頁, 切換 page1 = switch_to_page(context, title='新聞') print(page1.title()) browser.close()
3.1.3運行代碼
1.運行代碼,右鍵Run'Test',控制檯輸出,如下圖所示:
2.運行代碼後電腦端的瀏覽器的動作。如下圖所示:
3.2URL切換
和title的思路類似:前邊已經將所有的標籤的title都循環出來了,我們只要切換到我們需要操作的url標籤頁即可。
3.2.1代碼設計
3.2.2參考代碼
# coding=utf-8🔥 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 # 2.註釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2023-07-13 @author: 北京-宏哥 QQ交流羣:705269076 公衆號:北京宏哥 Project: 《最新出爐》系列入門篇-Python+Playwright自動化測試-14-playwright處理瀏覽器多窗口切換 ''' # 3.導入模塊 from playwright.sync_api import sync_playwright def switch_to_page(context, url=None): """切換到指定url 的 標籤頁""" for item_page in context.pages: if url: if url in item_page.url: # 激活當前選項卡 item_page.bring_to_front() return item_page else: print("not found url") return context.pages[0] with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto('https://www.baidu.com') # 點開多個標籤頁 for link in page.locator('#s-top-left>a').all(): link.click() # 打開多個tab 標籤頁, 切換 page1 = switch_to_page(context, url='hao') print(page1.title()) browser.close()
3.2.3運行代碼
1.運行代碼,右鍵Run'Test',控制檯輸出,如下圖所示:
2.運行代碼後電腦端的瀏覽器的動作。如下圖所示:
4.小結
本文主要介紹了playwright的頁面切換,playwright切換頁面不需要獲取頁面句柄,實現比selenium簡單許多,是playwright對於selenium的一大優勢。