【问题标题】:Playwright: how to wait until there is no animation on the page?编剧:如何等到页面没有动画?
【发布时间】:2022-10-25 10:30:02
【问题描述】:

我试图弄清楚如何检查页面是否已在 Playwright 中完全加载。 await page.waitForLoadState('networkidle'); 在 Javascript 繁重的网站上并不总是适合我。我采取了截图base64,等待100毫秒,重新截图,并比较它们是否相同。然而这似乎并不理想,有什么办法可以询问 Playwright 的最后一个动画帧何时重绘?

【问题讨论】:

    标签: playwright


    【解决方案1】:

    有几个选项可以帮助您。

    1.解决方案一:

    首先,您可以确定最后加载哪个元素,然后继续

    page.waitForSelector('yourselector')
    

    甚至等待多个选择器出现

    page.waitForSelector('yourselector1','yourselector2')
    

    2.解决方案2

    page.waitForLoadState('domcontentloaded')
    

    因为

    page.waitForLoadState('networkidle') 
    

    默认情况下将等待网络事件,如果 0.5 秒没有网络交易,它会说,我不再需要等待。这就是为什么你可能有随机行为。

    【讨论】:

    • 有什么方法可以从这里挂钩到 screencastframe 事件:github.com/microsoft/playwright/blob/main/packages/… 我也在录制视频,如果我可以收听这个事件,我可以等到足够的时间过去
    • 只是这样做是行不通的 + 显示 TS 警告:page.on('screencastframe', () => { console.log(1231323);})
    • 不确定你在录制什么,但在剧作家中你可以选择录制视频,而不是自己实现。在配置文件中,只需将视频设置为“开”,然后在记者中查找跟踪文件,在那里您可以看到视频执行以及页面如何为您加载。如果您没有找到选项,请发表评论,我会为您找到它。
    • 使用page.goto() 时,您可以直接将其作为第二个参数传递:await page.goto(/my-page, { waitUntil: 'networkidle' })
    【解决方案2】:

    如果给定的解决方案不适合您,您可以尝试使用定位器。

    page.locator(selector[, options])
    

    它有多个类似的 api定位器.isDisabled或者locator.waitFor([选项])或者locator.isVisible([选项])或者locator.frameLocator(选择器)....... 多很多。

    在此处查看以下链接: https://playwright.dev/docs/api/class-locator

    【讨论】:

    • 是的,这仍然需要我知道要在下一页上查找。我想要一个通用方法gotoAndWaitTIllIts100PercentLoaded
    • 或者只是使用 await new Promise(r => setTimeout(r, 100)); stackoverflow.com/questions/951021/…
    猜你喜欢
    • 2021-12-08
    • 2021-11-10
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多