我有以下功能
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。