《最新出爐》系列入門篇-Python+Playwright自動化測試-15-playwright處理瀏覽器多窗口切換

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的一大優勢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章