使用pytest-asyncio搭配pyppeteer执行launch后不运行后续语句
问题原因与修复方案
你提交的代码存在3类核心问题,会导致启动后卡住或直接报错:
- 方法调用对象错误:
new_page()是浏览器实例browser的内置方法,不是pyppeteer模块的方法 - 导入逻辑错误:代码仅导入了
pyppeteer下的launch方法,没有导入整个pyppeteer模块,即使你要调用模块方法也会触发未定义报错 - 缺少必要的资源回收逻辑和启动兼容参数:测试结束后没有关闭浏览器会导致异步任务挂起,部分权限受限的环境下缺少启动参数也会导致Chromium启动后无响应
修复后的可运行代码
import pytest from pyppeteer import launch @pytest.mark.asyncio async def test_BackendWeb(): # 添加兼容参数避免不同环境下启动卡住 browser = await launch( headless=False, args=['--no-sandbox', '--disable-dev-shm-usage'] ) # 调用浏览器实例的方法新建页面 page = await browser.new_page() await page.goto('https://www.google.com/') # 测试完成后主动关闭浏览器释放资源 await browser.close()
额外注意事项
- 确保已经安装
pytest-asyncio依赖,才能正常运行异步测试用例 - 首次运行如果Pyppeteer自动下载Chromium失败,可以在
launch方法中添加executablePath参数,传入本地已安装的Chrome/Chromium可执行文件路径即可 - 自动化批量测试时建议将
headless参数改为True,可以大幅提升运行效率
内容的提问来源于stack exchange,提问作者Manish Saini
相关产品推荐
相关产品推荐

