Python 求教使用 playwright + pytest 的时候遇到 await page.goto 一直阻塞

咸吃萝卜淡操心 · 2025年02月18日 · 最后由 dubda 回复于 2025年02月19日 · 2260 次阅读

确认没有网络问题和环境问题,

直接 使用

 from playwright.async_api import async_playwright, Playwright
@pytest.mark.asyncio
async def test_home_page_loading22():
    p = await async_playwright().start()
# browser = await p.chromium.launch(headless=False, devtools=True)
    chromium = p.chromium # or "firefox" or "webkit".
    browser = await chromium.launch()
    page = await browser.new_page()
    await page.goto("https://www.baidu.com")
# other actions...
    await browser.close()

这个 case 可以执行成功,await page.goto("https://www.baidu.com") 可以正常完成

但是 在 conftest.py 简单封一层 fixture

@pytest.fixture(scope="session")
async def browser():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)  # 可根据需要配置启动参数
        yield browser
        await browser.close()

@pytest.fixture
async def page(browser) -> AsyncGenerator:
    context = await browser.new_context()
    page = await context.new_page()
    yield page
    await context.close()

在 test_home.py

@pytest.mark.asyncio
async def test_home_page_loading(page):
    """测试首页加载"""
    await page.goto("https://www.baidu.com/")

这里 await page.goto("https://www.baidu.com") 代码就一直阻塞在这里,但是实际情况是已经执行完成了,这个在 UI 操作上是可以看到的。
问了 DS GPT. 都没能解答,自己感觉问题可能就在 yield 但是 就是没能想明白😂 😂 😂

共收到 3 条回复 时间 点赞

之前我写 demo 的时候是使用的 pytest.anyio 声明为异步方式运行的,你可以试试

dubda 回复

跟 pytest.mark.asyncio 结果是一样的

我复制了你的代码,运行没问题😅

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册