我的代码设置如下
1. await page.click(selectors.login.submit)
2. await page.waitForNavigation({waitUntil:'networkidle0'})
3. await page.click(selectors.transation.navLink)
4. await page.waitForResponse(response => response.ok())
5. await page.click(selectors.transation.addNew)
在这里,第5行不会等到第4行完成所有响应。
我已经尝试使用
Promise.all([
page.click(selectors.transation.navLink)
await page.waitForResponse(response => response.ok())
])
认为,promise中的所有脚本都会在执行第5行之前首先执行,但是由于某种原因,它并未按预期发生那样发生。
我什至尝试使用await page.waitForNavigation({waitUntil:'networkidle0'})
而不是await page.waitForResponse(response => response.ok())
认为会有所帮助,但其作用完全相同
预期结果应该首先执行page.waitfor
函数,让所有请求完成,然后继续执行page.click
函数。
答案 0 :(得分:0)
我会尝试page.waitForNavigation()
的文档中提到的Promise.all()
中的page.click()
。参见https://pptr.dev/#?product=Puppeteer&version=v2.0.0&show=api-pageclickselector-options:
await Promise.all([
page.waitForNavigation(waitOptions),
page.click(selectors.transation.navLink)
]);
您似乎在await
之前错过了Promise.all()
,在await
之前还有一个额外的page.waitForResponse()
。以我的经验,额外的await
会导致代码在运行时出错。
可能与设置有关,具体取决于您的设置:我发现,对于引起整页导航的点击(实际重新加载页面的点击),page.waitForNavigation(waitOptions)
是必需的,而对于仅调用XHR的点击(显示为(而不是重新加载整个页面)),await page.waitForResponse(response => response.ok())
是最好的。