news 2026/3/24 6:04:40

Python+Playwright自动化测试--playwright处理浏览器多窗口切换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python+Playwright自动化测试--playwright处理浏览器多窗口切换

1.简介

浏览器多窗口的切换问题相比大家不会陌生吧,之前小编在java+selenium系列文章中就有介绍过。大致步骤就是:使用selenium进行浏览器的多个窗口切换测试,如果我们打开了多个网页,进行网页切换时,我们需要先获取各个页面的句柄,通过句柄来区分各个页面,然后使用switch_to.window()实现切换,这样的操作比较麻烦,而且小编在介绍和讲解的时候,也写了好几篇相关的文章。反过来今天我们所学的playwright来处理浏览器多窗口切换却比selenium更为简单快捷。下边小编就给小伙伴们或者童鞋们介绍一下playwrigh如何处理浏览器多个窗口的切换方法。

2.测试场景

我们以访问百度为例,百度首页有多个选项,新闻,hao123网址导航,贴吧等多个选项,我们点击不同的选项,就会打开不同的新标签页。当打开多个标签页后, 如何切换到自己想要的页面上操作。

思路:我们可以通过脚本,输出百度首页各页面的标题,通过context.pages可以获取到所有的page对象,每一个page对象就代表一个标签页实例。

2.1代码设计

2.2参考代码

  1. # coding=utf-8🔥

  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

  3. # 2.注释:包括记录创建时间,创建人,项目名称。

  4. # 3.导入模块

  5. from playwright.sync_api import sync_playwright

  6. with sync_playwright() as playwright:

  7. browser = playwright.chromium.launch(headless=False)

  8. context = browser.new_context()

  9. page = context.new_page()

  10. page.goto('https://www.baidu.com')

  11. # 点开多个标签页

  12. for link in page.locator('#s-top-left>a').all():

  13. link.click()

  14. # 遍历page对象

  15. for i in context.pages:

  16. print(i.title())

  17. browser.close()

2.3运行代码

1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

3.多窗口切换方法

3.1Title切换

前边已经将所有的标签的title都循环出来了,我们只要切换到我们需要操作的title标签页即可。

3.1.1代码设计

3.1.2参考代码

  1. # coding=utf-8🔥

  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

  3. # 2.注释:包括记录创建时间,创建人,项目名称。

  4. # 3.导入模块

  5. from playwright.sync_api import sync_playwright

  6. def switch_to_page(context, title=None):

  7. """切换到指定title 名称的标签页"""

  8. for item_page in context.pages:

  9. if title:

  10. if title in item_page.title():

  11. # 激活当前选项卡

  12. item_page.bring_to_front()

  13. return item_page

  14. else:

  15. print("not found title")

  16. return context.pages[0]

  17. with sync_playwright() as playwright:

  18. browser = playwright.chromium.launch(headless=False)

  19. context = browser.new_context()

  20. page = context.new_page()

  21. page.goto('https://www.baidu.com')

  22. # 点开多个标签页

  23. for link in page.locator('#s-top-left>a').all():

  24. link.click()

  25. # 打开多个tab 标签页, 切换

  26. page1 = switch_to_page(context, title='新闻')

  27. print(page1.title())

  28. browser.close()

3.1.3运行代码

1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

3.2URL切换

和title的思路类似:前边已经将所有的标签的title都循环出来了,我们只要切换到我们需要操作的url标签页即可。

3.2.1代码设计

3.2.2参考代码

  1. # coding=utf-8🔥

  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

  3. # 2.注释:包括记录创建时间,创建人,项目名称。

  4. # 3.导入模块

  5. from playwright.sync_api import sync_playwright

  6. def switch_to_page(context, url=None):

  7. """切换到指定url 的 标签页"""

  8. for item_page in context.pages:

  9. if url:

  10. if url in item_page.url:

  11. # 激活当前选项卡

  12. item_page.bring_to_front()

  13. return item_page

  14. else:

  15. print("not found url")

  16. return context.pages[0]

  17. with sync_playwright() as playwright:

  18. browser = playwright.chromium.launch(headless=False)

  19. context = browser.new_context()

  20. page = context.new_page()

  21. page.goto('https://www.baidu.com')

  22. # 点开多个标签页

  23. for link in page.locator('#s-top-left>a').all():

  24. link.click()

  25. # 打开多个tab 标签页, 切换

  26. page1 = switch_to_page(context, url='hao')

  27. print(page1.title())

  28. browser.close()

3.2.3运行代码

1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

4.小结

本文主要介绍了playwright的页面切换,playwright切换页面不需要获取页面句柄,实现比selenium简单许多,是playwright对于selenium的一大优势。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/17 1:01:45

Qwen3-VL-2B-Instruct性能优化:让推理速度提升3倍

Qwen3-VL-2B-Instruct性能优化:让推理速度提升3倍 [toc] 1. 引言:为何需要对Qwen3-VL-2B-Instruct进行性能优化? 随着多模态大模型在视觉理解、图文生成和代理交互等场景中的广泛应用,推理效率已成为决定其能否落地的关键因素。…

作者头像 李华
网站建设 2026/3/15 10:10:28

MediaPipe Hands性能测试:CPU环境下毫秒级手部追踪实战

MediaPipe Hands性能测试:CPU环境下毫秒级手部追踪实战 1. 引言:AI手势识别的现实挑战与工程落地 1.1 手势识别的技术演进背景 随着人机交互方式的不断演进,基于视觉的手势识别技术正逐步从实验室走向消费级应用。从早期的Kinect体感控制到…

作者头像 李华
网站建设 2026/3/11 2:15:24

HS2-HF补丁终极指南:快速解锁完整游戏体验

HS2-HF补丁终极指南:快速解锁完整游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为角色加载失败而烦恼?面对日文界面不知所…

作者头像 李华
网站建设 2026/3/14 20:30:35

苏州大学研究生论文LaTeX模板:5分钟搞定专业排版

苏州大学研究生论文LaTeX模板:5分钟搞定专业排版 【免费下载链接】Soochow-University-Thesis-Overleaf-LaTeX-Template 苏州大学研究生毕业论文Latex模板 - Overleaf 项目地址: https://gitcode.com/gh_mirrors/so/Soochow-University-Thesis-Overleaf-LaTeX-Tem…

作者头像 李华
网站建设 2026/3/4 8:12:01

AI手势识别优化指南:降低延迟与提升精度的参数详解

AI手势识别优化指南:降低延迟与提升精度的参数详解 1. 引言:AI 手势识别与追踪的技术价值 随着人机交互技术的快速发展,AI手势识别正逐步从实验室走向消费级应用。无论是智能穿戴设备、AR/VR交互系统,还是智能家居控制&#xff…

作者头像 李华
网站建设 2026/3/6 19:16:20

【ACM出版、稳定EI检索 | IEEE Fellow支持,高校主办、海内外双会场 | 大数据、设计类、数字媒体类均可投】第二届人工智能、数字媒体技术与社会计算国际学术会议 (ICAIDS 2026)

人工智能、大数据、设计类、数字媒体类等方向皆可投 第二届人工智能、数字媒体技术与社会计算国际学术会议 (ICAIDS 2026) The 2nd International Conference on Artificial Intelligence, Digital Media Technology and Social Computing 大会时间&…

作者头像 李华