page.click函数不会等到page.waitForResponse完成

时间:2019-06-10 22:19:46

标签: typescript testing automation jestjs puppeteer

我的代码设置如下

  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函数。

1 个答案:

答案 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())是最好的。