• 《最新出炉》系列入门篇-Python+Playwright自动化测试-15-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.注释:包括记录创建时间,创建人,项目名称。
    '''
    Created on 2023-07-13
    @author: 北京-宏哥   QQ交流群:705269076
    公众号:北京宏哥
    Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-14-playwright处理浏览器多窗口切换
    '''
    
    # 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.注释:包括记录创建时间,创建人,项目名称。
    '''
    Created on 2023-07-13
    @author: 北京-宏哥   QQ交流群:705269076
    公众号:北京宏哥
    Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-14-playwright处理浏览器多窗口切换
    '''
    
    # 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.注释:包括记录创建时间,创建人,项目名称。
    '''
    Created on 2023-07-13
    @author: 北京-宏哥   QQ交流群:705269076
    公众号:北京宏哥
    Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-14-playwright处理浏览器多窗口切换
    '''
    
    # 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的一大优势。

  • 相关阅读:
    全会月薪至少 3W 的 面试题汇总,
    CMake继续学习
    SQL Server 常见问题
    CCF2022版最新目录已发布,最新变动情况分析
    大数据开发-Hadoop分布式集群搭建
    xss-labs/level6
    基于FPGA的视频接口之千兆网口(一)
    【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库
    FPGA设计过程中有关数据之间的并串转化
    K8S 极速入门
  • 原文地址:https://www.cnblogs.com/du-hong/p/17544662.html