Typescript 我没有在Puppeter上获得正确的脚本,在UI中等待数据加载到下拉列表中

Typescript 我没有在Puppeter上获得正确的脚本,在UI中等待数据加载到下拉列表中,typescript,automation,jestjs,ui-automation,puppeteer,Typescript,Automation,Jestjs,Ui Automation,Puppeteer,我使用了一个等待已久的页面延迟(8000)来确保下拉框中的所有数据都已加载。我假设必须有一种方法等待下拉框中的所有数据被加载,然后自动化进入下一步 我尝试对选择器使用验证,但无法对查询中填充的动态数据进行验证。我还尝试使用等待页面。延迟(n),但这不是正确的方法,因为有时运行查询可能需要一些时间 page.click(selectors.xxx.nnn) await delay (1000) page.keyboard.type('abc') await delay(80

我使用了一个等待已久的页面延迟(8000)来确保下拉框中的所有数据都已加载。我假设必须有一种方法等待下拉框中的所有数据被加载,然后自动化进入下一步

我尝试对选择器使用验证,但无法对查询中填充的动态数据进行验证。我还尝试使用等待页面。延迟(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')
因此,使用延迟可以是一个解决方案,但不是一个合适的解决方案。如果有什么方法可以让Puppeter中的浏览器自动化等待,不是等待选择器,而是等待来自后端的数据。最好确保下拉列表中的所有预期列表都已填充并且可以选择。

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

代码示例

wait page.waitForFunction(()=>document.querySelector(“#selectbox的id”)。长度>0;
由于选择框上的
length
属性返回框内的选项数,因此此代码将等待选择框内至少有一个选项后再继续操作。

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

代码示例

wait page.waitForFunction(()=>document.querySelector(“#selectbox的id”)。长度>0;

由于选择框上的
length
属性返回其中的选项数,因此此代码将等待选择框中至少有一个选项后再继续操作。

等待页面。waitForResponse(response=>response.status()==200)


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


这两种方法都允许自动操作等待所有响应成功

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


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


这两种方法都允许自动化等待所有响应成功

看起来我们可以使用
wait page.waitForNavigation({waitUntil:'networkidle0'})
,它等待所有网络调用完成,但由于某种原因它不会进入下一步。接下来我尝试使用
response.ok()
函数,但这只适用于一个请求,而在我的情况下,我有两个请求,一个是飞行前请求。有什么想法吗?@DenishS
waitForNavigation
实际上会等待页面导航(而不是请求)。我刚才还概述了使用
waitForResponse
方法的方法。这对你有帮助吗?在经历了数小时的不同尝试之后,page.waitForResponse(response=>response.status()==200)为我找到了答案。因此,如果所有请求都成功且响应成功状态为200,那么现在我的自动化将继续下一步。看起来我们可以使用
wait page.waitForNavigation({waitUntil:'networkidle0'})
,它将等待所有网络调用完成,但由于某种原因,它不会进入下一步。接下来我尝试使用
response.ok()
函数,但这只适用于一个请求,而在我的情况下,我有两个请求,一个是飞行前请求。有什么想法吗?@DenishS
waitForNavigation
实际上会等待页面导航(而不是请求)。我刚才还概述了使用
waitForResponse
方法的方法。这对你有帮助吗?在经历了数小时的不同尝试之后,page.waitForResponse(response=>response.status()==200)为我找到了答案。因此,如果所有请求都成功且响应成功状态为200,那么现在我的自动化将继续到下一步。
await page.waitFor(selectors.xxx.nnn)
    page.click(selectors.xxx.nnn)
    await page.waitFor(selectors.xxx.abc)