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

Posted

技术标签:

【中文标题】Playwright JS - 如果找不到元素/选择器,如何全局定义/更改超时?【英文标题】:Playwright JS - How to globally define/change timeout if element/selector not found? 【发布时间】:2021-08-19 13:41:45 【问题描述】:

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

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

await page.waitForSelector('h1',  timeout: 5000 );

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

提前致谢。

【问题讨论】:

嗨,我查看了文档,发现了“page.setDefaultTimeout(timeout)”方法,它可以覆盖默认的 30 秒超时。查看文档:playwright.dev/docs/api/class-page/…。希望对您有所帮助。 谢谢!这对我很有帮助。 【参考方案1】:

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

browserContext.setDefaultTimeout(timeout)

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

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

browserContext.setDefaultNavigationTimeout(timeout)

这将优先用于导航。

使用 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
  ,
;

【讨论】:

这似乎无法回答 OP 的问题。他们在询问如何全局定义单个函数调用的超时时间,例如 goto()waitForSelector(),而不是整个测试的超时时间。 谢谢@Hades 我没有发现。我已经更新了我的答案,我认为它现在涵盖了特定请求。我在文档中(还)看不到任何关于在 playwright.config.js 中设置 setDefaultTimeout 的内容,所以这在“设置”的意义上不是全局的它并忘记它”,但它比每个方法调用都要好。【参考方案2】:

每页超时:

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

page.setDefaultTimeout( timeout ):

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

page.setDefaultNavigationTimeout( timeout ):

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

全局超时:

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;

【讨论】:

以上是关于Playwright JS - 如果找不到元素/选择器,如何全局定义/更改超时?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Playwright.js 中检查页面上是不是存在元素

python+playwright 学习-8.如何在控制台调试定位(Inspect selectors)

python+playwright 学习-3.页面操作Action

单选按钮:在大海捞针中找不到输入?

如何使用 PlayWright (python) 下载嵌入式 PDF?

Nightwatch测试在Headless chrome模式下找不到元素