很多情况下,我们都需要等待页面加载到一定程度才能进行下一步操作,而这个度该怎么操作,这篇文章就来详细讲一讲
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"是一个很好的平衡点,但如果测试需求特殊,可以考虑使用其他选项或组合使用以达到更精细的控制。
版权归原作者 电商人学python 所有, 如有侵权,请联系我们删除。