我没有在puppeteer上获得正确的脚本,在UI中,它一直等待直到将数据加载到下拉列表中

时间:2019-06-06 17:21:29

标签: typescript automation jestjs ui-automation puppeteer

我正在使用长时间等待页面延迟(8000),只是为了确保下拉列表中的所有数据都已加载。我认为必须有一种方法可以等待,直到下拉框中的所有数据都加载完毕,然后自动进行下一步。

我尝试对选择器使用验证,但是我们无法对查询中填充的动态数据进行验证,也尝试使用await page.delay(n),但这不是正确的方法,因为有时运行查询可能会占用一段时间。

page.click(selectors.xxx.nnn)
    await delay (1000)
    page.keyboard.type('abc')
    await delay(8000)
    page.keyboard.press('ArrowDown')
    page.keyboard.press('ArrowDown')
    page.keyboard.press('Enter')
await page.waitFor(selectors.xxx.nnn)
    page.click(selectors.xxx.nnn)
    await page.waitFor(selectors.xxx.abc)

因此,使用延迟可能是一种解决方案,但不是适当的解决方案。如果有办法,我可以让puppeteer中的浏览器自动化,而不是选择器,而是后端的数据。确保下拉列表中的所有预期列表都已填充并可以选择,这将是很好的选择。

2 个答案:

答案 0 :(得分:0)

您可以使用page.waitForFunction等待特定函数返回true。在您的情况下,您可以计算下拉框的选项。我假设“下拉框”是一个简单的<select>...</select> HTML元素。

代码示例

await page.waitForFunction(() => document.querySelector('#id-of-selectbox').length > 0);

当选择框上的length属性返回其中的选项数量时,此代码将等待,直到选择框内至少有一个选项为止。

答案 1 :(得分:0)

await page.waitForResponse(response => response.status() === 200)

await page.waitForResponse(response => response.ok())

这都允许自动化程序等待所有响应都成功