Playwright的等待机制 —— 确保自动化测试的稳定性
在自动化测试中,等待是一个不可或缺的环节。由于网络延迟和页面加载时间的不确定性,我们需要确保在进行元素操作之前,页面已经完全加载,或者特定的元素已经可用。在Playwright中,有着强大的等待机制来帮助我们处理这些情况。今天,我们将通过百度网页的例子来深入探讨Playwright的等待策略

在自动化测试中,等待是一个不可或缺的环节。由于网络延迟和页面加载时间的不确定性,我们需要确保在进行元素操作之前,页面已经完全加载,或者特定的元素已经可用。在Playwright中,有着强大的等待机制来帮助我们处理这些情况。今天,我们将通过百度网页的例子来深入探讨Playwright的等待策略
示例1:等待页面网络请求完成
让我们来看一个使用Playwright等待直到500毫秒内没有新的网络请求发生的例子。我们将访问百度网页,并搜索一个关键词,等待直到500毫秒内没有新的网络请求发生。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto('https://www.baidu.com')
page.fill('input[name="wd"]', 'Playwright') # 填充搜索关键词
page.click('input[id="su"]') # 点击搜索按钮
# 等待直到500毫秒内没有新的网络请求发生。
page.wait_for_load_state('networkidle')
browser.close()
在这个例子中,我们首先导航到百度首页,然后填充搜索框并点击搜索按钮。接下来,我们使用page.wait_for_load_state方法等待直到500毫秒内没有新的网络请求发生。这个方法会阻塞后续的操作,直到没有新的网络请求发生或者超时。
示例2:等待元素出现
wait_for_selector 方法是一种等待机制,它允许你等待直到页面上的某个元素变得可用。这个方法特别有用,因为它确保了在与页面元素交互之前,该元素已经加载并且可以操作。这有助于避免因元素尚未准备好而导致的测试失败。
wait_for_selector 方法返回一个 Locator 对象,该对象表示页面上的元素。你可以对这个 Locator 对象使用各种 Playwright API 方法,如 click、fill、get_attribute 等。
假设你想要在百度搜索 "Playwright" 这个关键词,并等待搜索结果中的一个特定元素出现。以下是一个使用 wait_for_selector 方法的示例:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
# 导航到百度首页
page.goto("https://www.baidu.com")
# 等待搜索框元素出现
search_box = page.wait_for_selector('#kw')
# 在搜索框中输入搜索关键词
search_box.fill('Playwright')
# 按下回车键进行搜索(等同于点击搜索按钮)
page.press('#kw', 'Enter')
# 等待搜索结果中的一个结果元素出现
result = page.wait_for_selector('.result')
# 打印第一个搜索结果的文本
first_result_text = result.inner_text()
print(first_result_text)
# 关闭浏览器
browser.close()
在这个例子中:
-
首先,我们使用
goto方法导航到百度的首页。 -
使用
wait_for_selector方法等待 ID 为#kw的搜索框元素出现。这确保了在尝试填充搜索框之前,该元素已经加载并可用。 -
使用
fill方法在搜索框中输入 "Playwright"。 -
使用
press方法模拟按下回车键,这将触发搜索。 -
再次使用
wait_for_selector方法等待搜索结果中的一个结果元素(类名为.result)出现。 -
使用
inner_text方法获取第一个搜索结果的文本内容,并打印出来。 -
最后,关闭浏览器。
通过使用 wait_for_selector 方法,我们可以确保在执行操作之前,目标元素已经加载并且可以与之交互,从而提高自动化脚本的稳定性和成功率。
示例3:等待指定的时间
wait_for_timeout 是 Playwright 中的一个实用函数,它允许自动化脚本暂停执行一段时间,以便页面有足够的时间来完成某些可能需要时间的操作,例如等待网络请求完成、动画完成或其他异步事件。这个函数不会检查页面上的任何特定条件,只是简单地等待指定的时间。
假设我们要在 360 搜索网站上搜索一些内容,并在点击搜索按钮后等待一段时间,以确保搜索结果页面完全加载。以下是一个使用 wait_for_timeout 的示例:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
# 导航到 360 搜索网站
page.goto("https://www.360.cn/")
# 等待搜索框可见
search_box = page.wait_for_selector('#haosou-input')
# 在搜索框中输入搜索内容
search_box.fill('Playwright 测试')
# 点击搜索按钮
search_button = page.wait_for_selector('.btn-submit')
search_button.click()
# 等待搜索结果页面完全加载
page.wait_for_timeout(3000) # 等待 3 秒
# 执行搜索结果页面上的其他操作,例如获取结果数量等
# ...
browser.close()
在这个示例中:
-
我们首先使用
goto方法导航到 360 搜索网站的首页。 -
使用
wait_for_selector等待搜索框元素可见。 -
使用
fill方法在搜索框中输入搜索关键词。 -
使用
wait_for_selector等待搜索按钮可见并点击它。 -
使用
wait_for_timeout等待 3 秒钟,以确保搜索结果页面完全加载。这是一个简单的等待,不考虑页面上的具体元素状态。 -
在等待完成后,我们可以执行其他需要在搜索结果页面上进行的操作。
-
最后,关闭浏览器。
请注意,wait_for_timeout 应该谨慎使用,因为它不检查页面状态,只是简单地等待指定的时间。在可能的情况下,最好使用更具体的等待条件,例如等待某个元素出现或消失,或者等待页面的某个状态变化。这样可以确保脚本的稳定性和可靠性。
结语
掌握了Playwright的等待机制,你的自动化测试脚本将更加稳定和可靠。无论是同步等待还是异步等待,都能帮助你确保在正确的时机进行元素操作。在接下来的系列文章中,我们将继续探索Playwright的高级功能,帮助你编写更加复杂和强大的自动化测试脚本。
感谢你的阅读,如果你有任何关于Playwright等待机制的问题,或者想要分享你的使用经验,欢迎在评论区留言。让我们一起学习,一起进步。下期见!
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


更多推荐
https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502



所有评论(0)