前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python+playwright 学习-79 设置全局导航超时和全局查找元素超时

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

作者头像
上海-悠悠
发布2023-09-11 19:36:35
1.2K0
发布2023-09-11 19:36:35
举报

前言

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

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

导航超时设置

当访问的网页加载很慢时

代码语言:javascript
复制
from playwright.sync_api import sync_playwright, expectwith sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()

    page = context.new_page()    # 访问浏览器页面
    page.goto('https://www.cnblogs.com/')

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

代码语言:javascript
复制
playwright._impl._api_types.TimeoutError: Timeout 30000ms exceeded.
=========================== logs ===========================
navigating to "https://www.cnblogs.com/", waiting until "load"
============================================================

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

代码语言:javascript
复制
    # 访问浏览器页面
    page.goto('https://www.cnblogs.com/', timeout=10000)

也可以设置全局超时

代码语言:javascript
复制
from playwright.sync_api import sync_playwright, expectwith sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()        # 设置全局40秒超时
    context.set_default_navigation_timeout(40000)

    page = context.new_page()        # 访问浏览器页面
    page.goto('https://www.cnblogs.com/')

设置全局导航超时

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

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

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

代码语言:javascript
复制
# context 
context.set_default_navigation_timeout(40000)

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

代码语言:javascript
复制
# page 页面对象超时 20秒page.set_default_navigation_timeout(20000)

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

代码语言:javascript
复制
from playwright.sync_api import sync_playwright, expect

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    # 设置全局context 40秒超时
    context.set_default_navigation_timeout(40000)

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

    # 访问浏览器页面
    page.goto('https://www.cnblogs.com/', timeout=1000)

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

设置操作元素超时

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

代码语言:javascript
复制
    # 操作元素
    page.locator('text=找不到元素').click()

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

代码语言:javascript
复制
playwright._impl._api_types.TimeoutError: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for locator("text=找不到元素")
============================================================

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

代码语言:javascript
复制
page.locator('text=找不到元素').click(timeout=1000)

设置全局操作元素timeout 超时

代码语言:javascript
复制
    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-08-30 09:32,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 导航超时设置
  • 设置全局导航超时
  • 设置操作元素超时
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档