Python写UI自动化--playwright(等待页面加载机制)

很多情况下,我们都需要等待页面加载到一定程度才能进行下一步操作,而这个度该怎么操作,这篇文章就来详细讲一讲

目录

expect_popup()

wait_until参数

"load"

'commit':

"domcontentloaded"

"networkidle"

"networkidle0" 和 "networkidle2"

多状态组合


expect_popup()

首先常见的情况是我们在现有的页面上执行某些操作(如点击一个链接或按钮)时,可能会触发新的浏览器窗口或标签页的打开,expect_popup()是playwright中用于处理新打开的浏览器窗口或标签页的方法。expect_popup()允许我们等待并捕获这个新打开的窗口或标签页,以便进行进一步的操作或测试。

下面是一个简单的例子,展示了如何使用expect_popup():

from playwright.sync_api import Page

def test_except_popup(page: Page):
    page.goto(url='https://www.baidu.com')
    page.locator('//input[@name="wd"]').fill("百度百科")
    page.get_by_text('百度一下').click()

    with page.expect_popup() as new_page:  # page.expect_popup() 获取新页面,监听是否到达新页面
        page.get_by_role("link", name="百度百科 - 百度百科").click()

    new_page1=new_page.value
    expect(new_page1.get_by_role("button", name="进入词条").first).to_be_visible()

get_by_role方法可以根据元素的角色(例如按钮、输入框、链接等)来选择元素

"button": 按钮
"link": 链接

expect_popup() 的返回值
expect_popup()返回一个PopupInfo对象,这个对象包含了新打开的窗口或标签页的引用。可以通过value属性获取到这个引用,然后像操作任何其他页面一样操作这个新页面

expect_popup()是Playwright中处理新打开窗口或标签页的重要方法,通过它可以确保自动化测试脚本能正确地与新打开的页面进行交互。如果在测试过程中遇到了打开新窗口或标签页的场景,就可以用到expect_popup()!

wait_until参数

用于指定playwright应该等待页面达到什么状态之后再继续执行后续的脚本。wait_until参数对于页面加载策略至关重要,不同的值会影响脚本的执行效率和稳定性。下面是wait_until参数的不同选项及其效果和适用场景的详细介绍::

"load"

·含义: 等待页面的load事件,这是页面加载完成的标准事件,意味着所有的资源都已经加载完毕。
·使用场景: 如果需要确保页面上所有的资源(如图片、样式表、脚本文件)都已经加载完成,可以选择此选项。但请注意,这通常会导致最长的等待时间。

用法如下:

page.goto('目标URL', wait_until="load")

'commit':

当浏览器提交请求开始加载页面时立即继续执行

用法如下:

page.goto('目标URL', wait_until="commit")

"domcontentloaded"

·含义: 等待DOMContentLoaded事件,这意味着DOM树已经构建完成,页面已经可以进行交互,但外部资源可能还在加载。
·默认值: 自Playwright版本1.16起,"domcontentloaded"成为wait_until的默认值。
·使用场景: 对于大多数测试用例来说,这是最佳的选择,因为它在保证页面基本可交互的同时,提供了较快的响应速度。

用法如下:

page.goto('目标URL', wait_until="domcontentloaded")

"networkidle"

·含义: 等待网络空闲,即没有HTTP请求正在进行。这通常意味着页面已完全加载,包括所有依赖资源。
·使用场景: 当你进行全页面截图、PDF生成或需要页面完全渲染完成的场景时,这个选项很有用。

用法如下:

page.goto('目标URL', wait_until="networkidle")

"networkidle0" 和 "networkidle2"

·含义: 这两个选项与"networkidle"类似,但它们对网络空闲状态的定义更为细致。
·"networkidle0": 允许少量数据下载,如字体文件。
·"networkidle2": 更加严格,几乎所有的网络活动都必须停止。
使用场景: 这些选项适用于需要更精确控制页面加载状态的高级测试用例。

多状态组合

wait_until可以接受一个状态数组,以等待多个事件全部发生。例如,想要等待页面加载完成并且网络空闲,可以同时等待"domcontentloaded"和"networkidle",以确保DOM就绪且所有资源加载完成。

page.goto('目标URL', wait_until=["domcontentloaded", "networkidle"])

正确选择wait_until的值对于确保自动化测试的准确性和效率至关重要。通常情况下,"domcontentloaded"是一个很好的平衡点,但如果测试需求特殊,可以考虑使用其他选项或组合使用以达到更精细的控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值