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

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的一大优势。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐

  1. 自动化测试工具playwright

    2023-12-22 21:42:02       13 阅读
  2. Playwright:下一代自动化测试工具

    2023-12-22 21:42:02       30 阅读
  3. Playwright 这个强大的自动化测试工具

    2023-12-22 21:42:02       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 21:42:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 21:42:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 21:42:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 21:42:02       20 阅读

热门阅读

  1. OpenVAS 数据库管理

    2023-12-22 21:42:02       30 阅读
  2. 点云最小二乘法拟合直线 Matlab

    2023-12-22 21:42:02       42 阅读
  3. rust为什么是系统编程语言

    2023-12-22 21:42:02       39 阅读
  4. 基于小波变换的图像去噪算法及Matlab源码

    2023-12-22 21:42:02       39 阅读
  5. 基于改进的SAR-SIFT算法的SAR图像配准附Matlab代码

    2023-12-22 21:42:02       37 阅读
  6. Android 实现热点开机后自动开启

    2023-12-22 21:42:02       54 阅读
  7. 网络安全选择题20道——附答案

    2023-12-22 21:42:02       31 阅读
  8. Android Framework一些问题思考

    2023-12-22 21:42:02       37 阅读
  9. 文件上传存储工具

    2023-12-22 21:42:02       47 阅读
  10. 多数元素

    2023-12-22 21:42:02       34 阅读
  11. 微服务降级策略及其在Spring Boot中的实现

    2023-12-22 21:42:02       50 阅读