经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » 浏览器 » 查看文章
《最新出炉》系列入门篇-Python+Playwright自动化测试-15-playwright处理浏览器多窗口切换 - 北京-宏哥
来源:cnblogs  作者:北京-宏哥  时间:2023/8/30 9:21:37  对本文有异议

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.  
  3. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  4.  
  5. # 2.注释:包括记录创建时间,创建人,项目名称。
  6. '''
  7. Created on 2023-07-13
  8. @author: 北京-宏哥 QQ交流群:705269076
  9. 公众号:北京宏哥
  10. Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-14-playwright处理浏览器多窗口切换
  11. '''
  12.  
  13. # 3.导入模块
  14. from playwright.sync_api import sync_playwright
  15. with sync_playwright() as playwright:
  16. browser = playwright.chromium.launch(headless=False)
  17. context = browser.new_context()
  18. page = context.new_page()
  19. page.goto('https://www.baidu.com')
  20. # 点开多个标签页
  21. for link in page.locator('#s-top-left>a').all():
  22. link.click()
  23. # 遍历page对象
  24. for i in context.pages:
  25. print(i.title())
  26. browser.close()

2.3运行代码

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

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

3.多窗口切换方法

3.1Title切换

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

3.1.1代码设计

3.1.2参考代码
  1. # coding=utf-8??
  2.  
  3. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  4.  
  5. # 2.注释:包括记录创建时间,创建人,项目名称。
  6. '''
  7. Created on 2023-07-13
  8. @author: 北京-宏哥 QQ交流群:705269076
  9. 公众号:北京宏哥
  10. Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-14-playwright处理浏览器多窗口切换
  11. '''
  12.  
  13. # 3.导入模块
  14. from playwright.sync_api import sync_playwright
  15. def switch_to_page(context, title=None):
  16. """切换到指定title 名称的标签页"""
  17. for item_page in context.pages:
  18. if title:
  19. if title in item_page.title():
  20. # 激活当前选项卡
  21. item_page.bring_to_front()
  22. return item_page
  23. else:
  24. print("not found title")
  25. return context.pages[0]
  26. with sync_playwright() as playwright:
  27. browser = playwright.chromium.launch(headless=False)
  28. context = browser.new_context()
  29. page = context.new_page()
  30. page.goto('https://www.baidu.com')
  31. # 点开多个标签页
  32. for link in page.locator('#s-top-left>a').all():
  33. link.click()
  34. # 打开多个tab 标签页, 切换
  35. page1 = switch_to_page(context, title='新闻')
  36. print(page1.title())
  37. 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.  
  3. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  4.  
  5. # 2.注释:包括记录创建时间,创建人,项目名称。
  6. '''
  7. Created on 2023-07-13
  8. @author: 北京-宏哥 QQ交流群:705269076
  9. 公众号:北京宏哥
  10. Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-14-playwright处理浏览器多窗口切换
  11. '''
  12.  
  13. # 3.导入模块
  14. from playwright.sync_api import sync_playwright
  15. def switch_to_page(context, url=None):
  16. """切换到指定url 的 标签页"""
  17. for item_page in context.pages:
  18. if url:
  19. if url in item_page.url:
  20. # 激活当前选项卡
  21. item_page.bring_to_front()
  22. return item_page
  23. else:
  24. print("not found url")
  25. return context.pages[0]
  26. with sync_playwright() as playwright:
  27. browser = playwright.chromium.launch(headless=False)
  28. context = browser.new_context()
  29. page = context.new_page()
  30. page.goto('https://www.baidu.com')
  31. # 点开多个标签页
  32. for link in page.locator('#s-top-left>a').all():
  33. link.click()
  34. # 打开多个tab 标签页, 切换
  35. page1 = switch_to_page(context, url='hao')
  36. print(page1.title())
  37. browser.close()
3.2.3运行代码

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

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

4.小结

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

原文链接:https://www.cnblogs.com/du-hong/p/17544662.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号