python+playwright 学习-79 设置全局导航超时和全局查找元素超时

上海-悠悠 / 2023-08-28 / 原文

前言

playwright 默认全局的导航时间是30秒,查找元素超时也是30秒, 有以下几个方法设置全局超时时间:

  • browser_context.set_default_navigation_timeout()
  • browser_context.set_default_timeout()
  • page.set_default_navigation_timeout()
  • page.set_default_timeout()

导航超时设置

当访问的网页加载很慢时


会报一个超时的异常:TimeoutError: Timeout 30000ms exceeded.


可以在goto() 访问网站的时候设置timeout超时时间


也可以设置全局超时


设置全局导航超时

set_default_navigation_timeout 设置的时间只对以下方法有效:

  • page.go_back()
  • page.go_forward()
  • page.goto()
  • page.reload()
  • page.set_content()
  • page.expect_navigation()

设置全局超时有2种方式:
方式1.在context对象设置全局导航页面超时

# context 
context.set_default_navigation_timeout(40000)

方式2.在page对象设置全局导航页面超时

# page 页面对象超时 20秒
page.set_default_navigation_timeout(20000)

如果goto()和page对象,context 对象都有设置超时时间


那么goto()设置的优先级大于page对象,page对象设置的大于context对象设置的超时时间。

设置操作元素超时

默认情况下,操作元素时,查找元素超时时间是30秒

    # 操作元素
    page.locator('text=找不到元素').click()

点击元素时,找不到会报超时异常TimeoutError: Timeout 30000ms exceeded.

playwright._impl._api_types.TimeoutError: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for locator("text=找不到元素")
============================================================

可以针对单次操作click() 方法传timeout 参数

page.locator('text=找不到元素').click(timeout=1000)

设置全局操作元素timeout 超时

    context = browser.new_context()
    context.set_default_timeout(3000)
    page = context.new_page()
    page.set_default_timeout(2000)

与前面设置导航超时时间一样,也是可以在context 和page对象设置timeout。
优先级:单次操作设置的timeout > page.set_default_timeout() > context.set_default_timeout()

需注意的是:set_default_timeout设置的时间不仅仅对操作元素有效,对前面的页面导航也会生效。

set_default_timeout 与 set_default_navigation_timeout 优先级:
page.set_default_navigation_timeout() > page.set_default_timeout() > browser_context.set_default_navigation_timeout() > browser_context.set_default_timeout()


2023最新《Playwright+Python自动化测试》点我 ->立即参与
联系微信:283340479