我有以下功能
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'
如何解决此问题,以便我可以继续访问我的页面字段并保留异步功能?
最佳答案
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 .
关于python - 异步将对象转换为协程。加载对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525375/