最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Playwright進(jìn)行移動(dòng)端模擬測(cè)試的實(shí)現(xiàn)

 更新時(shí)間:2026年01月23日 11:07:00   作者:質(zhì)量保障小喬  
Playwright 移動(dòng)端模擬通過設(shè)備上下文實(shí)現(xiàn)了對(duì)屏幕、觸摸、網(wǎng)絡(luò)、地理位置的全方位模擬,結(jié)合內(nèi)置設(shè)備預(yù)設(shè)和自定義配置,可高效覆蓋從功能測(cè)試到兼容性驗(yàn)證的場(chǎng)景,感興趣的可以了解一下

Playwright 提供了強(qiáng)大的移動(dòng)端模擬能力,支持模擬真實(shí)移動(dòng)設(shè)備的屏幕尺寸、分辨率、用戶代理(User Agent)、觸摸事件、地理位置甚至網(wǎng)絡(luò)條件,無需真實(shí)設(shè)備即可完成移動(dòng)端網(wǎng)頁(yè)/應(yīng)用的功能與兼容性測(cè)試。以下是具體實(shí)現(xiàn)步驟與核心場(chǎng)景示例(以 Python 為例):

一、核心原理:通過“設(shè)備上下文”模擬移動(dòng)環(huán)境

Playwright 通過 browser.new_context()chromium.launch_persistent_context() 創(chuàng)建“設(shè)備上下文(Context)”,在上下文配置中指定移動(dòng)設(shè)備參數(shù)(如屏幕尺寸、UA 等),從而模擬移動(dòng)瀏覽器行為。核心配置項(xiàng)包括:

  • device_scale_factor:設(shè)備像素比(如視網(wǎng)膜屏為 2);
  • is_mobile:是否啟用移動(dòng)模式(開啟后支持觸摸事件);
  • viewport:屏幕可視區(qū)域大?。▽?times;高,單位像素);
  • user_agent:移動(dòng)設(shè)備的 User Agent 字符串;
  • has_touch:是否支持觸摸事件(移動(dòng)端需開啟)。

二、基礎(chǔ)操作:使用內(nèi)置設(shè)備預(yù)設(shè)快速模擬

Playwright 內(nèi)置了 50+ 常見移動(dòng)設(shè)備配置(如 iPhone 13、Pixel 7、iPad Pro 等),無需手動(dòng)配置參數(shù),直接調(diào)用即可。

步驟 1:獲取內(nèi)置設(shè)備列表

通過 playwright.devices 查看所有預(yù)設(shè)設(shè)備,例如:

from playwright.sync import sync_playwright  

with sync_playwright() as p:  
    # 打印所有內(nèi)置設(shè)備名稱(如 "iPhone 13", "Pixel 7")  
    print(list(p.devices.keys()))  

步驟 2:模擬指定設(shè)備訪問網(wǎng)頁(yè)

以“模擬 iPhone 13 訪問百度”為例:

from playwright.sync import sync_playwright  

with sync_playwright() as p:  
    # 1. 選擇要模擬的設(shè)備(如 iPhone 13)  
    iphone_13 = p.devices["iPhone 13"]  

    # 2. 啟動(dòng)瀏覽器,創(chuàng)建移動(dòng)設(shè)備上下文  
    browser = p.chromium.launch(headless=False)  # headless=False 可看到瀏覽器界面  
    context = browser.new_context(  
        **iphone_13,  # 解構(gòu)設(shè)備參數(shù)(包含 viewport、ua、is_mobile 等)  
        locale="zh-CN",  # 可選:設(shè)置語言  
    )  

    # 3. 打開頁(yè)面,模擬移動(dòng)操作  
    page = context.new_page()  
    page.goto("https://www.baidu.com")  

    # 4. 示例:模擬移動(dòng)端搜索(點(diǎn)擊搜索框→輸入文本→點(diǎn)擊搜索按鈕)  
    page.locator("input[type='search']").click()  # 觸摸點(diǎn)擊  
    page.keyboard.type("Playwright 移動(dòng)端測(cè)試")  
    page.locator("input[type='submit']").nth(0).click()  

    # 5. 截圖驗(yàn)證效果(保存為移動(dòng)端尺寸的圖片)  
    page.screenshot(path="iphone_13_baidu.png")  

    # 6. 關(guān)閉資源  
    context.close()  
    browser.close()  

運(yùn)行后,會(huì)看到瀏覽器以 iPhone 13 的屏幕尺寸(390×844)打開百度,且支持觸摸交互。

三、高級(jí)模擬:自定義設(shè)備參數(shù)與場(chǎng)景

1. 自定義設(shè)備(非內(nèi)置設(shè)備)

若需模擬特定設(shè)備(如某款安卓機(jī)型),可手動(dòng)配置參數(shù):

custom_device = {  
    "viewport": {"width": 412, "height": 915},  # 屏幕尺寸(如三星 S21)  
    "user_agent": "Mozilla/5.0 (Linux; Android 12; SM-G991B) AppleWebKit/537.36 ...",  # 安卓UA  
    "device_scale_factor": 2.625,  # 像素比  
    "is_mobile": True,  # 啟用移動(dòng)模式  
    "has_touch": True,  # 支持觸摸  
    "default_browser_type": "chromium"  
}  

# 創(chuàng)建上下文時(shí)使用自定義設(shè)備  
context = browser.new_context(** custom_device)  

2. 模擬觸摸事件(滑動(dòng)、捏合縮放)

移動(dòng)端核心交互依賴觸摸,Playwright 通過 page.touchscreen 提供觸摸 API:

  • 滑動(dòng)操作(如上下滑動(dòng)頁(yè)面):

    # 從 (x1, y1) 滑動(dòng)到 (x2, y2)(坐標(biāo)基于 viewport 尺寸)  
    page.touchscreen.tap(200, 300)  # 先點(diǎn)擊起點(diǎn)  
    page.touchscreen.press(200, 300)  # 按下  
    page.touchscreen.move(200, 600)  # 移動(dòng)(向下滑動(dòng))  
    page.touchscreen.release()  # 松開  
    
  • 捏合縮放(如放大圖片):

    # 模擬雙指捏合:兩個(gè)觸摸點(diǎn)從遠(yuǎn)到近(縮小)  
    page.touchscreen.tap(100, 200)  
    page.touchscreen.tap(300, 200)  
    with page.expect_event("touchstart"):  
        page.touchscreen.press(100, 200)  
        page.touchscreen.press(300, 200)  
    with page.expect_event("touchmove"):  
        page.touchscreen.move(150, 200)  # 兩點(diǎn)靠近  
        page.touchscreen.move(250, 200)  
    page.touchscreen.release()  
    

3. 模擬地理位置(GPS 定位)

對(duì)依賴位置的應(yīng)用(如地圖、外賣),可模擬經(jīng)緯度:

# 設(shè)置初始地理位置(北京:北緯39.9,東經(jīng)116.4)  
context.set_geolocation(latitude=39.9, longitude=116.4)  

# 訪問需要定位的頁(yè)面(如百度地圖)  
page = context.new_page()  
page.goto("https://map.baidu.com")  
page.screenshot(path="beijing_location.png")  

# 動(dòng)態(tài)修改位置(切換到上海)  
context.set_geolocation(latitude=31.2, longitude=121.4)  
page.reload()  
page.screenshot(path="shanghai_location.png")  

4. 模擬網(wǎng)絡(luò)條件(2G/3G 環(huán)境)

移動(dòng)端常面臨弱網(wǎng)問題,可通過 context.set_extra_http_headerspage.route 限制網(wǎng)絡(luò)速度:

# 模擬 3G 網(wǎng)絡(luò)(下載 1MB/s,上傳 512KB/s,延遲 300ms)  
context = browser.new_context(**iphone_13)  
context.set_network_conditions(  
    download_throughput=1024 * 1024,  # 下載吞吐量(字節(jié)/秒)  
    upload_throughput=512 * 1024,    # 上傳吞吐量  
    latency=300                      # 延遲(毫秒)  
)  

# 測(cè)試弱網(wǎng)下頁(yè)面加載時(shí)間  
page = context.new_page()  
page.goto("https://www.taobao.com")  
print(f"頁(yè)面加載時(shí)間:{page.evaluate('performance.timing.loadEventEnd - performance.timing.navigationStart')}ms")  

四、響應(yīng)式布局測(cè)試:快速切換設(shè)備尺寸

通過動(dòng)態(tài)修改 viewport 測(cè)試頁(yè)面在不同尺寸下的響應(yīng)式表現(xiàn):

# 定義多組設(shè)備尺寸(手機(jī)、平板、小屏手機(jī))  
viewports = [  
    {"width": 375, "height": 667},  # iPhone SE  
    {"width": 768, "height": 1024}, # iPad  
    {"width": 320, "height": 568}   # 小屏手機(jī)  
]  

for vp in viewports:  
    context = browser.new_context(  
        viewport=vp,  
        is_mobile=True,  
        has_touch=True  
    )  
    page = context.new_page()  
    page.goto("https://example.com")  
    page.screenshot(path=f"responsive_{vp['width']}x{vp['height']}.png")  
    context.close()  

五、最佳實(shí)踐與注意事項(xiàng)

  1. 結(jié)合截圖/錄屏驗(yàn)證:通過 page.screenshot()context.tracing 錄制操作過程,直觀確認(rèn)布局和交互是否符合預(yù)期。

    # 開啟追蹤(記錄所有操作、網(wǎng)絡(luò)請(qǐng)求、DOM變化)  
    context.tracing.start(screenshots=True, snapshots=True)  
    # 執(zhí)行操作...  
    context.tracing.stop(path="mobile_trace.zip")  # 生成追蹤文件(可在 Playwright Trace Viewer 中查看)  
    
  2. 處理移動(dòng)端特有元素:如漢堡菜單(點(diǎn)擊展開導(dǎo)航)、底部懸浮按鈕,需通過 page.locator 精準(zhǔn)定位(優(yōu)先使用 data-testid 等穩(wěn)定屬性)。

  3. 與測(cè)試框架集成:結(jié)合 pytest 等框架實(shí)現(xiàn)批量用例執(zhí)行,例如:

    import pytest  
    from playwright.sync import sync_playwright  
    
    @pytest.mark.parametrize("device", ["iPhone 13", "Pixel 7", "iPad Pro 11"])  
    def test_mobile_compatibility(device):  
        with sync_playwright() as p:  
            browser = p.chromium.launch()  
            context = browser.new_context(** p.devices[device])  
            page = context.new_page()  
            page.goto("https://example.com")  
            assert page.title() == "Example Domain"  # 驗(yàn)證核心功能  
            context.close()  
            browser.close()  
    
  4. 注意瀏覽器差異:移動(dòng)端 Safari(WebKit)和 Chrome(Chromium)對(duì) CSS/JS 的支持可能不同,建議用 p.webkitp.chromium 分別測(cè)試。

總結(jié)

Playwright 移動(dòng)端模擬通過“設(shè)備上下文”實(shí)現(xiàn)了對(duì)屏幕、觸摸、網(wǎng)絡(luò)、地理位置的全方位模擬,結(jié)合內(nèi)置設(shè)備預(yù)設(shè)和自定義配置,可高效覆蓋從功能測(cè)試到兼容性驗(yàn)證的場(chǎng)景。其優(yōu)勢(shì)在于:無需真實(shí)設(shè)備、支持多瀏覽器、API 簡(jiǎn)潔且與桌面自動(dòng)化統(tǒng)一,大幅降低移動(dòng)端測(cè)試的門檻。

到此這篇關(guān)于使用Playwright進(jìn)行移動(dòng)端模擬測(cè)試的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Playwright 移動(dòng)端模擬測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python有序查找算法 二分法實(shí)例解析

    python有序查找算法 二分法實(shí)例解析

    這篇文章主要介紹了python有序查找算法 二分法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • linux系統(tǒng)使用python獲取內(nèi)存使用信息腳本分享

    linux系統(tǒng)使用python獲取內(nèi)存使用信息腳本分享

    這篇文章主要介紹了linux系統(tǒng)使用python獲取內(nèi)存使用情況信息,大家參考使用吧
    2014-01-01
  • 利用python的socket發(fā)送http(s)請(qǐng)求方法示例

    利用python的socket發(fā)送http(s)請(qǐng)求方法示例

    這篇文章主要給大家介紹了關(guān)于利用python的socket發(fā)送http(s)請(qǐng)求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-05-05
  • 詳解Python中time()方法的使用的教程

    詳解Python中time()方法的使用的教程

    這篇文章主要介紹了詳解Python中time()方法的使用的教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Pygame實(shí)戰(zhàn)之實(shí)現(xiàn)經(jīng)典外星人游戲

    Pygame實(shí)戰(zhàn)之實(shí)現(xiàn)經(jīng)典外星人游戲

    這篇文章主要介紹了通過Pygame實(shí)現(xiàn)經(jīng)典的外星人游戲的示例代碼,文中的代碼講解詳細(xì),對(duì)我們了解Pygame有一定的幫助,感興趣的同學(xué)可以試一試
    2022-01-01
  • scrapy利用selenium爬取豆瓣閱讀的全步驟

    scrapy利用selenium爬取豆瓣閱讀的全步驟

    這篇文章主要給大家介紹了關(guān)于scrapy利用selenium爬取豆瓣閱讀的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python中常用信號(hào)signal類型實(shí)例

    Python中常用信號(hào)signal類型實(shí)例

    這篇文章主要介紹了Python中常用信號(hào)signal類型實(shí)例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • windows系統(tǒng)上通過whl文件安裝triton模塊的簡(jiǎn)單步驟

    windows系統(tǒng)上通過whl文件安裝triton模塊的簡(jiǎn)單步驟

    這篇文章主要介紹了在Windows系統(tǒng)中通過.whl文件安裝Triton的步驟,包括確認(rèn)系統(tǒng)環(huán)境、下載合適的.whl文件、使用pip安裝、驗(yàn)證安裝、使用Triton以及解決潛在問題,需要的朋友可以參考下
    2025-01-01
  • 利用Python進(jìn)行數(shù)據(jù)可視化的實(shí)例代碼

    利用Python進(jìn)行數(shù)據(jù)可視化的實(shí)例代碼

    數(shù)據(jù)可視化和數(shù)據(jù)挖掘都是探索數(shù)據(jù)和分析數(shù)據(jù)的一種手段,下面這篇文章主要給大家介紹了關(guān)于如何利用Python進(jìn)行數(shù)據(jù)可視化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作詞袋模型

    Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作詞袋模型

    本文是Python機(jī)器學(xué)習(xí)NLP自然語言處理系列文章,帶大家開啟一段學(xué)習(xí)自然語言處理 (NLP) 的旅程。本篇文章主要學(xué)習(xí)NLP自然語言處理基本操作之詞袋模型
    2021-09-09

最新評(píng)論

长汀县| 苍梧县| 拉萨市| 皮山县| 宜章县| 四平市| 噶尔县| 长兴县| 民勤县| 依安县| 莱州市| 德安县| 佛教| 浮梁县| 安顺市| 海晏县| 阜城县| 乡宁县| 吴桥县| 慈溪市| 勐海县| 高雄县| 都兰县| 镇原县| 乐山市| 钟山县| 株洲市| 永修县| 安顺市| 福海县| 乡城县| 宣武区| 册亨县| 黑龙江省| 井陉县| 东明县| 香河县| 龙泉市| 云林县| 龙海市| 阿拉善盟|