如何在剧作家中给予固定等待,而不像我们在赛普拉斯中那样有任何条件:Cy.wait(600)

问题描述 投票:0回答:3

如何在剧作家中无条件地给予固定(隐式等待)等待。

我需要设置一个固定的等待值,如 cypress 所示:

Cy.等待(600);

谢谢你

automation cypress wait playwright playwright-test
3个回答
15
投票

要在 Playwright 中给出固定等待而不使用任何条件,可以使用 page.waitForTimeout 方法。此方法将在继续之前将脚本暂停指定的时间。

await page.waitForTimeout(2000); // waits for 2 seconds

您还可以将 page.waitForFunction 方法与在一定时间后返回 true 的函数一起使用。例如:

await page.waitForFunction(() => {
  const now = Date.now();
  return now - start > 2000;
});

这将等待 2 秒然后返回 true。

请注意,应谨慎使用这些方法,因为它们可能会导致脚本执行延迟。通常最好使用特定条件来确定何时继续,例如等待特定元素出现或页面加载。


10
投票

提高你的剧作家测试!为什么您应该避免艰难的等待以及该怎么做:

艰难等待的问题:

硬等待只做一件事——它们只是等待指定的时间 不考虑任何应用程序的实际响应时间,这是非常 严格的方法。

请参阅以下示例:

await page.waitForTimeout(5000); // hard wait for 5000ms

无论实际响应时间如何,这都会等待 5 秒,这可能少于或超过 5 秒,这在两种情况下都是不好的,因为在第一种情况下,它必须等待更长的时间,而在第二种情况下,它会等待对象已经加载的时间如果在失败情况下根本不会加载对象,则在不必要的等待 5 秒后失败。

推荐方法

等待页面发生预期变化

// For example a specific element is visible after login
await expect(page.getByText('Welcome')).toBeVisible();
内置等待

Playwright 在导航页面交互上有内置等待机制。由于它们是剧作家本身的一部分,因此最好使用它们并根据需要进行自定义。

显式等待

还有另一种显式处理等待的方法,仅在自动等待不是足够或有效的方法来处理的情况下,具体取决于具体情况,但一般来说,如果自动等待足以满足要求,则应避免这种情况。

等待页面导航和API响应

1)page.waitForNavigation 等待页面导航(新 URL 或页面重新加载)完成。

2)page.waitForLoadState 这会等待,直到达到所需的加载状态。

3)page.waitForURL 这将等待导航到目标 URL。

4)page.waitForResponse 等待直到收到给定 API 的响应。

等待元素

在延迟加载的页面中,使用 locator.waitFor() 等待元素可见可能很有用。或者,页面交互(例如 page.click())会自动等待元素。

// Navigate and wait for element
await page.goto('https://example.com');
await page.getByText('Example Domain').waitFor();

// Navigate and click element
// Click will auto-wait for the element
await page.goto('https://example.com');
await page.getByText('Example Domain').click();

等待页面事件

我们还可以使用 page.waitForEvent 直接等待页面事件。

定制等待功能

最后,我们还可以使用 WaitForFunction 为非常特定的场景或特定的应用程序控件编写(如果确实需要)自定义等待函数。


1
投票

这是 5 秒超时

await new Promise(resolve => setTimeout(resolve, 5000));
© www.soinside.com 2019 - 2024. All rights reserved.