playwright-python
playwright-python copied to clipboard
[Question]: how can I access async response's body in the predicate?
Your question
I can simply do this with sync api but I have no idea how to with async api; I've tried code like:
def check(response):
body_text = response.text()
# check if it is the response I need
async def foo():
page = await browser.new_page()
async with page.expect_response(url_or_predicate=check) as res:
#other job
but only got error said coroutine returned by response.text() needs await; if I change check to async function I got another error said check needs await. what is the correct way accessing response's body with async api?
Based on the impl, it looks like the predicate cannot be an async function today.
As a workaround, you can create and await a Future instead of using the built in page.expect_response for this case:
# set up your listener and future
matched_response_fut = asyncio.Future()
async def is_matching(response: Response):
body = await response.text()
if body == "some text you're looking for":
matched_response_fut.set_result(response)
page.on("response", is_matching)
# take your action(s) that will actually trigger the response
# e.g. navigation, clicking, etc.
# …
# await and use your matched response
response = await matched_response_fut
python+playwright
①The return value of this function is true
②Write the message you want to print when it fails
assert await ①function_test(),②failed
the function is
async def function_test(): print('Something') return True