前言
使用selenium进行web自动化测试,如果我们打开了多个网页,进行网页切换时,我们需要先获取各个页面的句柄,通过句柄来区分各个页面,然后使用switch_to.window()实现切换,这样的操作比较麻烦,playwright的网页切换比selenium更为简单快捷。本文就给大家介绍一下playwright多个网页的切换方法。
多页面场景
我们以访问百度为例,百度首页有多个选项,新闻,hao123网址导航,贴吧等多个选项,我们点击不同的选项,就会打开不同的新标签页,如下图:
我们可以通过脚本,输出百度首页各页面的标题,代码如下:
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())
运行脚本,结果如下:
百度一下,你就知道
hao123_上网从这里开始
百度地图
百度新闻——海量中文资讯平台
百度贴吧——全球领先的中文社区
好看视频--轻松有收获
title切换页面
playwright可以直接通过页面标题来切换页面,我们可以写一个函数来切换页面,代码如下:
from playwright.sync_api import sync_playwright
def switch_to_page(context, title=None, url=None):
"""切换到指定title 名称 或 url 的 标签页"""
for item_page in context.pages:
if title:
if title in item_page.title():
# 激活当前选项卡
item_page.bring_to_front()
return item_page
elif url:
if url in item_page.url:
# 激活当前选项卡
item_page.bring_to_front()
return item_page
else:
print("not found title or 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, title='贴吧')
print(page1.title())
运行脚本,界面如下图:
总结
本文主要介绍了playwright的页面切换,playwright切换页面不需要获取页面句柄,实现比selenium简单许多,是playwright对于selenium的一大优势。