异步转换对象协程。负载对象字段

问题描述 投票:1回答:1

我有以下功能

async def get_page(self, browser):
    page = await browser.newPage()
    await page._client.send("Emulation.clearDeviceMetricsOverride")
    await page.setViewport(
        {"width": 2560, "height": 1600, "deviceScaleFactor": 4})
    return page

随着下面的测试

def test_get_page(page_test_args):
    client = VjsClient()
    browser = client.get_browser()
    page = client.get_page(browser)
    assert page._viewport == page_test_args

当我的代码打

assert page._viewport == page_test_args

我遇到这个错误

    def test_get_page(page_test_args):
        client = VjsClient()
        browser = client.get_browser()
        page = client.get_page(browser)
>       assert page._viewport == page_test_args
E       AttributeError: 'coroutine' object has no attribute '_viewport'

我该如何解决,这样我可以保持我的访问页面领域,并保持异步功能?

python python-asyncio
1个回答
0
投票
async def get_page(self, browser):

这里async def意味着get_page的通话将返回asyncio coroutine。实际执行get_page并得到结果,你应该await这个协程。

您的测试应该改变这样的:

page = await client.get_page(browser)

但是请注意,如果你等待的内部功能的东西这个功能(test_get_page)必须协同程序本身(必须与async def定义)和地方等待被执行。

这意味着你应该除了使用pytest-asyncio为纯pytest如图所示here

© www.soinside.com 2019 - 2024. All rights reserved.