在Pytest中仅通过Page对象获取Playwright浏览器的executable_path与版本
在Pytest中仅通过Playwright Page对象获取浏览器的executable_path与version属性
在Pytest测试场景中,当仅持有Playwright的Page对象时,想要获取浏览器的executable_path和version属性用于测试报告生成,原先通过垃圾回收器gc.get_referrers结合正则解析的方式不够优雅且依赖内部实现。下面是基于Playwright官方API的稳定解决方案:
优雅实现方案
Playwright的Page对象可以通过层级关联直接获取到Browser实例,进而从BrowserType中拿到所需的浏览器信息,无需依赖垃圾回收或字符串解析:
#!/usr/bin/env python3 """ 获取浏览器版本与可执行路径 """ from playwright.sync_api import Page class TestClass: def test00_pageversion(self, page: Page): """ 通过Page对象优雅获取浏览器信息 """ # 从Page -> Context -> Browser的层级获取浏览器实例 browser = page.context.browser() if not browser: print("无法获取浏览器实例(可能为无头模式或特殊运行场景)") return browser_type = browser.browser_type # 直接读取官方API提供的属性 browser_name = browser_type.name browser_version = browser_type.version browser_executable_path = browser_type.executable_path print(f"name={browser_name}, version={browser_version} - executable_path={browser_executable_path}")
运行验证
执行测试命令后,输出结果与原方法一致,但实现更稳定:
pytest -s --log-level=INFO .\tests\test_00_browser.py -k test00 --browser=firefox # 输出: name=firefox, version=134.0 - executable_path=C:\Users\mobj\AppData\Local\ms-playwright\firefox-1471\firefox\firefox.exe pytest -s --log-level=INFO .\tests\test_00_browser.py -k test00 --browser-channel=chrome # 输出: name=chromium, version=134.0.6998.89 - executable_path=C:\Users\mobj\AppData\Local\ms-playwright\chromium-1155\chrome-win\chrome.exe
方案优势
- 完全基于Playwright官方公开API,避免依赖内部实现细节,兼容性更强
- 代码逻辑清晰直观,无需正则解析字符串或操作垃圾回收器
- 稳定可靠,不会因为Playwright内部结构变更导致功能失效
内容的提问来源于stack exchange,提问作者MortenB
相关产品推荐
相关产品推荐

