【问题标题】:page.click function does not wait till page.waitForResponse completespage.click 函数不会等到 page.waitForResponse 完成
【发布时间】:2019-10-25 07:34:24
【问题描述】:

我的代码是这样设置的

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

【问题讨论】:

    标签: typescript testing automation jestjs puppeteer


    【解决方案1】:

    我会尝试Promise.all() 中的page.waitForNavigation(),如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)
    ]);
    

    您的Promise.all() 之前似乎缺少await,并且您的page.waitForResponse() 之前还有一个额外的await。根据我的经验,这个额外的await 会导致代码在运行时出错。

    可能相关,具体取决于您的设置:我发现对于导致整页导航(页面实际重新加载的位置)的点击,需要 page.waitForNavigation(waitOptions),而对于仅调用 XHR 的点击(显示在网络标签而不是重新加载整页)await page.waitForResponse(response => response.ok()) 是最好的。

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2021-08-03
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多