自動化測試工具playwright中文文檔-------14.Chrome 插件

介紹

注意

插件僅在以持久化上下文啟動的 Chrome/Chromium 瀏覽器中工作。請謹慎使用自定義瀏覽器參數,因為其中一些可能會破壞 Playwright 的功能。

以下是獲取位于?./my-extension?的 Manifest v2 插件背景頁面句柄的代碼示例。

from playwright.sync_api import sync_playwright, Playwrightpath_to_extension = "./my-extension"
user_data_dir = "/tmp/test-user-data-dir"def run(playwright: Playwright):context = playwright.chromium.launch_persistent_context(user_data_dir,headless=False,args=[f"--disable-extensions-except={path_to_extension}",f"--load-extension={path_to_extension}",],)if len(context.background_pages) == 0:background_page = context.wait_for_event('backgroundpage')else:background_page = context.background_pages[0]# Test the background page as you would any other page.context.close()with sync_playwright() as playwright:run(playwright)

測試

為了在運行測試時加載擴展,你可以使用測試夾具(fixture)來設置上下文。此外,你還可以動態地檢索擴展ID,并使用它來加載和測試例如彈出頁面等。

首先,添加將加載擴展的測試夾具(fixtures)。

conftest.py
from typing import Generator
from pathlib import Path
from playwright.sync_api import Playwright, BrowserContext
import pytest@pytest.fixture()
def context(playwright: Playwright) -> Generator[BrowserContext, None, None]:path_to_extension = Path(__file__).parent.joinpath("my-extension")context = playwright.chromium.launch_persistent_context("",headless=False,args=[f"--disable-extensions-except={path_to_extension}",f"--load-extension={path_to_extension}",],)yield contextcontext.close()@pytest.fixture()
def extension_id(context) -> Generator[str, None, None]:# for manifest v2:# background = context.background_pages[0]# if not background:#     background = context.wait_for_event("backgroundpage")# for manifest v3:background = context.service_workers[0]if not background:background = context.wait_for_event("serviceworker")extension_id = background.url.split("/")[2]yield extension_id

然后在測試中使用

test_foo.py
from playwright.sync_api import expect, Pagedef test_example_test(page: Page) -> None:page.goto("https://example.com")expect(page.locator("body")).to_contain_text("Changed by my-extension")def test_popup_page(page: Page, extension_id: str) -> None:page.goto(f"chrome-extension://{extension_id}/popup.html")expect(page.locator("body")).to_have_text("my-extension popup")

無頭模式(Headless Mode)

警告

--headless=new?模式并不是 Playwright 官方支持的功能,并且可能會導致意外的行為。

在 Playwright 中,Chrome 的默認無頭模式并不支持 Chrome 擴展。為了克服這一限制,你可以通過以下代碼以新的無頭模式運行 Chrome 的持久化上下文(persistent context):

conftest.py
path_to_extension = Path(__file__).parent.joinpath("my-extension")
context = playwright.chromium.launch_persistent_context("",headless=False,args=["--headless=new",f"--disable-extensions-except={path_to_extension}", # 禁用 Chrome 瀏覽器中的所有擴展,除了指定路徑({path_to_extension})下的擴展。f"--load-extension={path_to_extension}", # 指定 Chrome 瀏覽器啟動時應該加載的擴展的路徑],
)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77062.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

讓 Python 腳本在后臺持續運行:架構級解決方案與工業級實踐指南

讓 Python 腳本在后臺持續運行:架構級解決方案與工業級實踐指南 一、生產環境需求全景分析 1.1 后臺進程的工業級要求矩陣 維度開發環境要求生產環境要求容災要求可靠性單點運行集群部署跨機房容災可觀測性控制臺輸出集中式日志分布式追蹤資源管理無限制CPU/Memo…

MyBatis 詳解

1. 什么是 MyBatis? MyBatis 是一款優秀的 持久層框架,它通過 XML 或注解配置,將 Java 對象(POJO)與數據庫操作(SQL)進行靈活映射,簡化了 JDBC 的復雜操作。 核心思想:S…

循環神經網絡 - 深層循環神經網絡

如果將深度定義為網絡中信息傳遞路徑長度的話,循環神經網絡可以看作既“深”又“淺”的網絡。 一方面來說,如果我們把循環網絡按時間展開,長時間間隔的狀態之間的路徑很長,循環網絡可以看作一個非常深的網絡。 從另一方面來 說&…

GoLand 標紅但程序可正常運行:由符號索引緩存失效引起的假報錯問題

問題描述: 在 GoLand 中,api/tls.go 文件中引用了 api/type.go 中定義的結構體 Options,但 GoLand 把 Options 標紅顯示為未定義(undefined symbol),盡管程序實際可以正常編譯和運行(go build /…

python-各種文件(txt,xls,csv,sql,二進制文件)讀寫操作、文件類型轉換、數據分析代碼講解

1.文件txt讀寫標準用法 1.1寫入文件 要讀取文件,首先得使用 open() 函數打開文件。 file open(file_path, moder, encodingNone) file_path:文件的路徑,可以是絕對路徑或者相對路徑。mode:文件打開模式,r 代表以…

Uniapp:確認框

目錄 一、 出現場景二、 效果展示三、具體使用 一、 出現場景 在項目的開發中,會經常出現刪除數據的情況,如果直接刪除的話,可能會存在誤刪,用戶體驗不好,所以需要增加一個消息提示,提醒用戶是否刪除。 二…

解密 Vue 打包策略

1. 總體概述 在現代前端開發中,Vue 已成為流行框架之一,開發者通常使用 webpack、vite 或 vue-cli 來構建項目。可能會困惑: 為什么源碼中的資源引用路徑與打包后實際產出的路徑會不一樣?靜態路徑與動態路徑到底如何正確書寫&am…

Golang|接口并發測試和壓力測試

文章目錄 這里出現某些獎品和數據庫中庫存量不一致的問題原因就是在并發的情況下,sync.Map仍然會出現臟寫問題,就是在同時操作下的操作覆蓋問題可以先把數據放到channel里,然后用一個單一的協程負責讀取channel并寫入map

CentOS下,Xftp中文文件名亂碼的處理方式

亂碼原因 中文版Windows默認使用GBK編碼,現代Linux發行版(如CentOS、Ubuntu等)默認使用UTF-8編碼。Windows下正常的編碼,可能在linux下無法識別,例如:Windows的GBK字節0xD6D0被Linux用UTF-8解碼時&#xf…

解決 Vue 中 input 輸入框被賦值后,無法再修改和編輯的問題

目錄 需求: 出現 BUG: Bug 代碼復現 解決問題: 解決方法1: 解決方法2 關于 $set() 的補充: 需求: 前段時間,接到了一個需求:在選擇框中選中某個下拉菜單時,對應的…

【含文檔+PPT+源碼】基于微信小程序的衛生院預約掛號管理系統的設計與實現

項目視頻介紹: 畢業作品基于微信小程序的衛生院預約掛號管理系統的設計與實現 課程簡介: 本課程演示的是一款基于微信小程序的衛生院預約掛號管理系統的設計與實現,主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習…

【Vue】案例——To do list:

【Vue】案例——To do list: 一、案例介紹:二、效果展示(如圖)三、主要功能:四、技術要點:補充:【Vue】Vue模板語法(點擊可跳轉)補充:【Vue】數據綁定(單雙向&#xff09…

導入 .sql 文件到 云服務器上的MySQL中

導入 .sql 文件到 云服務器上的MySQL中 步驟 1:確保 .sql 文件已上傳到云服務器步驟 2:登錄到云服務器步驟 3:檢查文件是否成功傳輸步驟 4:登錄 MySQL步驟 5:創建空數據庫(如果尚未創建)步驟 6&…

我的機器學習之路(初稿)

文章目錄 一、機器學習定義二、核心三要素三、算法類型詳解1. 監督學習(帶標簽數據)2. 無監督學習(無標簽數據)3. 強化學習(決策優化)(我之后主攻的方向) 四、典型應用場景五、學習路線圖六、常見誤區警示七…

VueDOMPurifyHTML 防止 ??XSS(跨站腳本攻擊)?? 風險

VueDOMPurifyHTML 是一個 ??Vue.js 插件??,用于在 v-html 指令中安全地渲染 HTML 內容,防止 ??XSS(跨站腳本攻擊)?? 風險。 ??作用?? ??解決 v-html 的安全問題?? Vue 的 v-html 會直接渲染原始 HTML&#xff0…

【數據結構】之散列

一、定義與基本術語 (一)、定義 散列(Hash)是一種將鍵(key)通過散列函數映射到一個固定大小的數組中的技術,因為鍵值對的映射關系,散列表可以實現快速的插入、刪除和查找操作。在這…

How AI could empower any business - Andrew Ng

How AI could empower any business - Andrew Ng References 人工智能如何為任何業務提供支持 empower /?m?pa??(r)/ vt. 授權;給 (某人) ...的權力;使控制局勢;增加 (某人的) 自主權When I think about the rise of AI, I’m reminded …

微服務的服務調用詳解以及常見解決方案對比

微服務服務調用詳解 1. 服務調用分類 服務調用根據通信方式、同步性、實現模式可分為以下類型: 按通信協議分類 類型典型協議/框架特點RPC(遠程過程調用)Dubbo、gRPC、Apache Thrift高性能、二進制協議、強類型定義HTTP/RESTSpring RestTe…

MySQL:B+樹索引

InnoDB索引方案 為了使用二分法快速定位具體的目錄項,假設所有目錄項都可以在物理存儲器上連續存儲,有以下問題: InnoDB使用頁為管理存儲空間的基本單位,最多只能保證16KB的連續存儲空間,記錄數據量多可能需要非常大…

THCON 2025

Crypto OTPas_ouf 用10個字符異或加密的jpg圖片,通過頭得到key再恢復原圖 Mammoths Personnal Slot Machine 梅森旋轉恢復 from pwn import * from randcrack import RandCrack from tqdm import trange context.log_level errorp remote(74.234.198.209, 33…