我具有以下功能
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'
如何解决此问题,以便可以继续访问页面字段并保持异步功能?
答案 0 :(得分:1)
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一样使用here和普通pytest
。