Python+Playwright自动化测试--标签页操作(tab)

1.简介

标签操作其实也是基于浏览器上下文(BrowserContext)进行操作的,而且宏哥在之前的BrowserContext也有提到过,但是有的童鞋或者小伙伴还是不清楚怎么操作,或者思路有点模糊,因此今天单独来对其进行讲解和分享一下,希望您有所帮助。

2.单标签页

单个标签操作这个是最简单的,之前讲的绝大多数都是单个标签的操作。通过context.new_page()就可以创建一个页面。

实战举例:以度娘为例,首先启动浏览器,然后再设置浏览器的大小。查询“北京宏哥”后,刷新页面执行回退到百度首页,然后有执行前进进入到搜索“北京宏哥”页面,最后退出浏览器。

2.1代码设计

按照上边的步骤进行代码设计,如下图所示:

2.2参考代码

# coding=utf-8🔥# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''# 3.导入模块
from playwright.sync_api import sync_playwrightwith sync_playwright() as p :# 1.启动浏览器browser  = p.chromium.launch(headless=False)# 2.设置浏览器窗口大小context = browser.new_context(viewport={'width': 1920, 'height': 1080},)page = context.new_page()# 3.访问度娘page.goto("https://www.baidu.com")# 等待5秒page.wait_for_timeout(5000)# 4.输入“北京宏哥”,点击“百度一下”page.fill("input[name=\"wd\"]", "北京宏哥")page.click("text=百度一下")# 等待5秒page.wait_for_timeout(5000)# 5.刷新页面page.reload()# 等待5秒page.wait_for_timeout(5000)# 6.浏览器后退page.go_back()# 等待5秒page.wait_for_timeout(5000)# 7.浏览器前进page.go_forward()# 8.浏览器退出page.wait_for_timeout(5000)context.close()browser.close()

2.3运行代码

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

2.运行代码后电脑端的浏览器的动作,

3.多标签页

每个浏览器上下文可以承载多个页面(选项卡)。

  • 每个页面都像一个聚焦的活动页面。不需要将页面置于最前面。
  • 上下文中的页面遵循上下文级别的模拟,例如视口大小、自定义网络路由或浏览器区域设置。
# create two pages
page_one = context.new_page()
page_two = context.new_page()# get pages of a browser context
all_pages = context.pages

实战举例:在page_one 标签页打开百度,输入“北京-宏哥”, 在page_two 标签页打开百度,输入“宏哥”。

3.1代码设计

3.2参考代码

# coding=utf-8🔥# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-13
@author: 北京-宏哥   QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-10-标签页操作(tab)
'''# 3.导入模块
from playwright.sync_api import sync_playwright#打开两个浏览器上下文
with sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=100)context = browser.new_context()  # 创建上下文,浏览器实例1page1 = context.new_page()    # 打开标签页1page2 = context.new_page()  # 打开标签页2page1.goto("https://www.baidu.com/")page1.fill('#kw', "北京宏哥")page1.wait_for_timeout(1000)page2.goto("https://www.baidu.com/")page2.fill('#kw', "宏哥")page2.wait_for_timeout(1000)browser.close()

3.3运行代码

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

2.运行代码后电脑端的浏览器的动作。虽然你看不到第一个页面的操作,实际上它已经操作了,每个页面 page对象都是聚焦的活动页面, 不需要将页面置于最前面。如下图所示:

4.处理新标签页

浏览器上下文中的事件page可用于获取在上下文中创建的新页面。这可用于处理通过target="_blank"链接打开的新页面。

# Get page after a specific action (e.g. clicking a link)
with context.expect_page() as new_page_info:page.get_by_text("open new tab").click() # Opens a new tab
new_page = new_page_info.valuenew_page.wait_for_load_state()
print(new_page.title())

实战举例:打开百度页面的-新闻链接,会出现一个新标签页,如下图所示:

4.1代码设计

4.2参考代码

# coding=utf-8🔥# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-13
@author: 北京-宏哥   QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-10-标签页操作(tab)
'''# 3.导入模块
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000)context = browser.new_context()  # 创建上下文,浏览器实例page = context.new_page()    # 打开标签页page.goto("https://www.baidu.com/")print(page.title())# Get page after a specific action (e.g. clicking a link)with context.expect_page() as new_page_info:page.click('text=新闻')  # Opens a new tabnew_page = new_page_info.valuenew_page.wait_for_load_state()  # 等待页面加载到指定状态print(new_page.title())browser.close()

4.3运行代码

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

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

如果触发新页面的操作未知,可以使用以下模式。

# Get all new pages (including popups) in the context
def handle_page(page):page.wait_for_load_state()print(page.title())context.on("page", handle_page)

5.处理弹出窗口

如果页面打开一个弹出窗口(例如通过链接打开的页面),您可以通过监听页面上的事件target="_blank"来获取对它的引用。popup
除了browserContext.on('page')事件之外还会发出此事件,但仅针对与此页面相关的弹出窗口。

# Get popup after a specific action (e.g., click)
with page.expect_popup() as popup_info:page.get_by_text("open the popup").click()
popup = popup_info.valuepopup.wait_for_load_state()
print(popup.title())

如果触发弹出窗口的操作未知,则可以使用以下模式。

# Get all popups when they open
def handle_popup(popup):popup.wait_for_load_state()print(popup.title())page.on("popup", handle_popup)

6.小结

  好了,时间不早了,关于标签操作今天就分享到这里。感谢你耐心地阅读。

最后:

为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】 

 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 资料获取方式:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nvidia-smi输出的结果代表什么

nvidia-smi(NVIDIA System Management Interface) 是基于nvml的gpu的系统管理接口,主要用于显卡的管理和状态监控。 nvidia-smi简称NVSMI,提供监控GPU使用情况和更改GPU状态的功能,是一个跨平台工具,支持所有标准的NVIDIA驱动程序支持的Linu…

【RS】基于规则的面向对象分类

ENVI使用最多的工具就是分类,这也是很多卫星影像的用途。在ENVI中有很多分类工具,如最基础的监督分类(最大似然法、最小距离、支持向量机、随机森林)、非监督分类(K-means、IsoData),还有面向对…

13、PHP面向对象2(方法的访问控制、子类继承、常量)

1、类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。 public定义的方法,可以在类外使用。 protected定义的方法,只能在本类或子类的定义内使用。 private定义的方法,只能在本…

ubuntu开机自启动

ubuntu开机自启动 1、建一个test.sh脚本,并写入 #!/bin/sh gnome-terminal -x bash -c ‘cd /home/文件路径/;python3 main.py’ exit 0 2、:wq!保存 3、创建rc-local.service文件(sudo vim /etc/systemd/system/rc-local.service)&#xf…

Linux系统安装部署MySQL完整教程(图文详解)

前言:最近网上翻阅了大量关于Linux安装部署MySQL的教程,在自己部署的时候总是存在一些小问题,例如:版本冲突,配置失败和启动失败等等,功夫不负有心人,最后还是安装部署成功了,所以本…

[SQL系列] 从头开始学PostgreSQL 事务 锁 子查询

[SQL系列] 从头开始学PostgreSQL 索引 修改 视图_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/131818865 事务 事务是一系列逻辑相关的数据库操作,可以作为一个整体进行操作或者回滚。事务通常会包含一个序列的读或者写操作&#xf…

Flink任务优化分享

Flink任务优化分享 1.背景介绍 线上计算任务在某版本上线之后发现每日的任务时长都需要三个多小时才能完成,计算时间超过了预估时间,通过Dolphinscheduler的每日调度任务看,在数据层 dwd 的数据分段任务存在严重的性能问题,每天…

20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片

20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片 2023/7/21 22:58 1、前言: AES-128加密的ts视频切片【第一个】,打开有时间限制的! https://app1ce7glfm1187.h5.xiaoeknow.com/v2/course/alive/l_64af6130e4b03e4b54da1681?typ…

研发机器配网方案(针对禁止外网电脑的组网方案)

背景:公司是研发型小公司,难免会使用A某D和K某l 等国内免费软件,这两个是业界律师函发得最多的软件。最简单的方案是离网使用,但是离网使用比较麻烦的是要进行文件传输,需要使用U盘拷贝,另外研发型企业一般…

【动态规划上分复盘】这是你熟悉的地下城游戏吗?

欢迎 前言一、动态规划五步曲二、地下城游戏题目分析思路:动态规划具体代码如下 总结 前言 本文讲解关于动态规划思路的两道题目。 一、动态规划五步曲 1.确定状态表示(确定dp数组的含义)2.确定状态转移方程(确定dp的递推公式&a…

Python中pyecharts模块

pyecharts模块 官网:pyecharts官网 pyecharts框架画廊 如果想要做出数据可视化效果图, 可以借助pyecharts模块来完成概况 : Echarts 是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可. 而…

巅峰极客2023 hellosql

随便输一个payload,有waf 这题只有两个回显,分别是太酷啦和nonono,不显示报错、登录成功等各种信息,目前只能想到用时间盲注。 抓包fuzz,194都是被过滤的 不止这些,手工测出来if、sleep、benchmark、*、rp…

办公室安全升级,如何保障人身财产安全?

视频监控,一种常见的安全措施,以监视和记录办公室内的活动。这项技术为企业提供了许多优势,包括保障员工和财产安全、帮助调查犯罪事件、提高业务管理效率以及应对突发事件。 因此,在合理范围内应用视频监控,将为企业提…

SAP从放弃到入门系列之批次派生-Batch Derivation-Part1

文章目录 一、概述二、系统配置三、主数据3.1 分类主数据3.2 派生规则设置3.2.1发送物料3.2.2 接收物料 四、 测试数据(生产订单)五、 最后 Batch Derivation翻译成批次派生(衍生)或批次继承都是问题不大,继承和派生个…

(学习笔记-IP)Ping的工作原理

Ping是基于ICMP协议工作的,ICMP报文封装在IP包里面,它工作在网络层,是IP协议的助手。 ICMP包头的类型字段,大致可分为两大类: 一类是用于诊断的查询消息,也就是查询报文类型一类是通知出错原因的错误消息&…

Spring 的元注解

一、元注解介绍 1.1.源码引入 1.2.元注解介绍 从上面的图片可知,Spring 有四个【负责注解其他注解】的元注解,分别是: Target:标识该注解可以用于标注哪些程序元素,比如类、方法、字段等。 Retention:标…

Zabbix-server监控mysql及httpd服务

目录 一、Zabbix监控mysql数据库 1、为server.Zabbix.com添加服务模板 2、创建mysql服务图形 二、server.zabbix.com服务器操作 编辑chk_mysql.sh脚本 三、server.Zabbix.com测试 四、查看web效果 五、Zabbix监控apache(httpd服务) 安装master 六、…

C++ 提高编程

C 提高编程 主要针对C泛型编程和STL技术 一、 模板 1、 概念 模板就是建立通用的模具,大大提高代码的复用性 模板特点 模板不可以直接使用,它只是一个框架 ​ 模板的通用并不是万能的 2、 函数模板 C 另一种编程思想为泛型编程,主要利用的…

Ubuntu搭建Samba服务-学习记录

文章目录 Ubuntu安装Samba流程Samba配置文件Samba添加账户配置文件修改Samba服务控制设置开机自动启动通过systemctl 启动服务通过 rc.local 启动 Windows访问参考链接 当前文章仅用于记录,在 Ubuntu中安装使用Samba,在Windows访问 系统环境:…

【问题记录】Ubuntu 22.04 环境下,程序报:段错误(核心已转储)怎么使用 core 文件和GDB调试器 解决?

目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware Workstation 16 Pro (版本:16.1.2 build-17966106)ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时,程序运行报&#xff1a…