Playwright JS - 如果找不到元素/选择器,如何全局定义/更改超时?

Mai*_*Ali 17 javascript automation timeout jestjs playwright

基本上,如果未找到元素,我希望剧作家等待每个元素 5 秒。

有一种方法可以单独更改超时,如下所示:

await page.waitForSelector('h1', { timeout: 5000 });
Run Code Online (Sandbox Code Playgroud)

但我只想在全局范围内定义一次,而不是在每个元素中定义它。

预先感谢。

sah*_*pee 10

可以使用以下方法为接受超时设置的每个方法设置超时:

browserContext.setDefaultTimeout(timeout)
Run Code Online (Sandbox Code Playgroud)

“browserContext”可能比“page”等价物稍微好一些,因为它是在整个 browserContext 中设置的。如果您想覆盖更广泛的 browserContext 设置,您始终可以使用页面设置。

如果您想要与其他方法不同的导航超时,也许在模拟慢速连接速度时,您还可以设置:

browserContext.setDefaultNavigationTimeout(timeout)
Run Code Online (Sandbox Code Playgroud)

这将优先用于导航。

使用 Playwright Test Runner 时,您可以通过创建 playwright.config.js 文件来全局设置整个测试的超时。

这里有关于具体超时设置的文档:

https://playwright.dev/docs/test-intro#use-test-hooks

但他们的例子的简化版本是:

// playwright.config.js
module.exports = {

  // Each test is given 30 seconds
  timeout: 30000,

  use: {
    // Configure browser and context here
  },
};
Run Code Online (Sandbox Code Playgroud)

  • 这似乎没有回答OP的问题。他们询问如何全局定义单个函数调用的超时,例如“goto()”和“waitForSelector()”,而不是整个测试的超时。 (3认同)

jor*_*isw 6

根据文档,您可以专门设置另一个超时expect

const config: PlaywrightTestConfig = {
  // General timeout per test
  timeout: 60000,

  // For browser actions
  use: {
    actionTimeout: 20000,
  },

  // For expect calls
  expect: {
    timeout: 10000,   // <---------
  },
}
Run Code Online (Sandbox Code Playgroud)

https://playwright.dev/docs/test-assertions#locator-assertions-to-be-visible


kca*_*kca 5

每页超时:

您可以设置这些“每页”默认超时。这不是全局设置,但至少您可以“每页”设置它,而不必在每个方法调用中设置它:

page.setDefaultTimeout( timeout )

此设置将更改所有接受超时选项的方法的默认最大时间

page.setDefaultNavigationTimeout( timeout )

此设置将更改以下方法和相关快捷方式的默认最大导航时间:
page.goBack([options])
page.goForward([options])
page.goto(url[, options])
page.reload([options] )
page.setContent(html[, 选项])
page.waitForNavigation([选项])
page.waitForURL(url[, 选项])

全局超时:

playwright.config.ts文件中:(
如果使用纯 Javascript,请删除 Typescript 语法)

import { PlaywrightTestConfig } from '@playwright/test';

const config: PlaywrightTestConfig = {
    globalTimeout: 60000, // Maximum time the whole test suite can run,
    timeout: 5000,        // Timeout for each test
};

export default config;
Run Code Online (Sandbox Code Playgroud)