1.简介
浏览器多窗口的切换问题相比大家不会陌生吧,之前小编在java+selenium系列文章中就有介绍过。大致步骤就是:使用selenium进行浏览器的多个窗口切换测试,如果我们打开了多个网页,进行网页切换时,我们需要先获取各个页面的句柄,通过句柄来区分各个页面,然后使用switch_to.window()实现切换,这样的操作比较麻烦,而且小编在介绍和讲解的时候,也写了好几篇相关的文章。反过来今天我们所学的playwright来处理浏览器多窗口切换却比selenium更为简单快捷。下边小编就给小伙伴们或者童鞋们介绍一下playwrigh如何处理浏览器多个窗口的切换方法。
2.测试场景
我们以访问百度为例,百度首页有多个选项,新闻,hao123网址导航,贴吧等多个选项,我们点击不同的选项,就会打开不同的新标签页。当打开多个标签页后, 如何切换到自己想要的页面上操作。
思路:我们可以通过脚本,输出百度首页各页面的标题,通过context.pages
可以获取到所有的page对象,每一个page对象就代表一个标签页实例。
2.1代码设计
2.2参考代码
-
# coding=utf-8🔥
-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
-
# 2.注释:包括记录创建时间,创建人,项目名称。
-
# 3.导入模块
-
from playwright.sync_api import sync_playwright
-
with sync_playwright() as playwright:
-
browser = playwright.chromium.launch(headless=False)
-
context = browser.new_context()
-
page = context.new_page()
-
page.goto('https://www.baidu.com')
-
# 点开多个标签页
-
for link in page.locator('#s-top-left>a').all():
-
link.click()
-
# 遍历page对象
-
for i in context.pages:
-
print(i.title())
-
browser.close()
2.3运行代码
1.运行代码,右键Run'Test',控制台输出,如下图所示:
2.运行代码后电脑端的浏览器的动作。如下图所示:
3.多窗口切换方法
3.1Title切换
前边已经将所有的标签的title都循环出来了,我们只要切换到我们需要操作的title标签页即可。
3.1.1代码设计
3.1.2参考代码
-
# coding=utf-8🔥
-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
-
# 2.注释:包括记录创建时间,创建人,项目名称。
-
# 3.导入模块
-
from playwright.sync_api import sync_playwright
-
def switch_to_page(context, title=None):
-
"""切换到指定title 名称的标签页"""
-
for item_page in context.pages:
-
if title:
-
if title in item_page.title():
-
# 激活当前选项卡
-
item_page.bring_to_front()
-
return item_page
-
else:
-
print("not found title")
-
return context.pages[0]
-
with sync_playwright() as playwright:
-
browser = playwright.chromium.launch(headless=False)
-
context = browser.new_context()
-
page = context.new_page()
-
page.goto('https://www.baidu.com')
-
# 点开多个标签页
-
for link in page.locator('#s-top-left>a').all():
-
link.click()
-
# 打开多个tab 标签页, 切换
-
page1 = switch_to_page(context, title='新闻')
-
print(page1.title())
-
browser.close()
3.1.3运行代码
1.运行代码,右键Run'Test',控制台输出,如下图所示:
2.运行代码后电脑端的浏览器的动作。如下图所示:
3.2URL切换
和title的思路类似:前边已经将所有的标签的title都循环出来了,我们只要切换到我们需要操作的url标签页即可。
3.2.1代码设计
3.2.2参考代码
-
# coding=utf-8🔥
-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
-
# 2.注释:包括记录创建时间,创建人,项目名称。
-
# 3.导入模块
-
from playwright.sync_api import sync_playwright
-
def switch_to_page(context, url=None):
-
"""切换到指定url 的 标签页"""
-
for item_page in context.pages:
-
if url:
-
if url in item_page.url:
-
# 激活当前选项卡
-
item_page.bring_to_front()
-
return item_page
-
else:
-
print("not found url")
-
return context.pages[0]
-
with sync_playwright() as playwright:
-
browser = playwright.chromium.launch(headless=False)
-
context = browser.new_context()
-
page = context.new_page()
-
page.goto('https://www.baidu.com')
-
# 点开多个标签页
-
for link in page.locator('#s-top-left>a').all():
-
link.click()
-
# 打开多个tab 标签页, 切换
-
page1 = switch_to_page(context, url='hao')
-
print(page1.title())
-
browser.close()
3.2.3运行代码
1.运行代码,右键Run'Test',控制台输出,如下图所示:
2.运行代码后电脑端的浏览器的动作。如下图所示:
4.小结
本文主要介绍了playwright的页面切换,playwright切换页面不需要获取页面句柄,实现比selenium简单许多,是playwright对于selenium的一大优势。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。