《最新出炉》系列入门篇-Python+Playwright自动化测试-9-页面(page)

1.简介

  通过前边的讲解和学习,细心认真地小伙伴或者童鞋们可能发现在Playwright中,没有Element这个概念,只有Page的概念,Page不仅仅指的是某个页面,例如页面间的跳转等,还包含了所有元素、事件的概念,所以我们包括定位元素、页面转向,都是基于Page操作的。页面提供了与浏览器中的单个选项卡或 Chromium 中的扩展后台页面进行交互的方法。一个浏览器实例可能有多个 Page 实例。

2.Browser、Context 和Page的关系

相信第一次接触Playwright的同学,一定会对Browser、Context 和Page这三个概念所困扰,不知道这三者有怎样的联系,今天宏哥就带大家梳理一下,一张图让大家秒懂!

2.1Browser

对应一个浏览器实例(Chromium、Firefox或WebKit),Playwright脚本以启动浏览器实例开始,以关闭浏览器结束。浏览器实例可以在headless或者 headful模式下启动。一个 Browser 可以包含多个 BrowserContext。一个Browser是一个Chromium, Firefox 或 WebKit(plarywright支持的三种浏览器)的实例plarywright脚本通常以启动浏览器实例开始,以关闭浏览器结束。浏览器实例可以在headless(没有 GUI)或head模式下启动。
启动browser实例是比较耗费资源的,plarywright做的就是如何通过一个browser实例最大化多个BrowserContext的性能。

2.2BrowserContext

Playwright为每个测试创建一个浏览器上下文,即BrowserContext,浏览器上下文相当于一个全新的浏览器配置文件,提供了完全的测试隔离,并且零开销。创建一个新的浏览器上下文只需要几毫秒,每个上下文都有自己的Cookie、浏览器存储和浏览历史记录。浏览器上下文允许同时打开多个页面并与之交互,每个页面都有自己单独的状态,一个 BrowserContext 可以包含多个 Page。一个BrowserContex就像是一个独立的匿名模式会话(session),非常轻量,但是又完全隔离。

每个browser实例可有多个BrowserContex,且完全隔离。比如可以在两个BrowserContext中登录两个不同的账号,也可以在两个 context 中使用不同的代理。
context还可用于模拟涉及移动设备、权限、区域设置和配色方案的多页面场景。

2.3Page

页面指的是浏览器上下文中的单个选项卡或弹出窗口。在Page中主要完成与页面元素交互,一个 Page 可以包含多个 Frame。

2.4Frame

每个页面有一个主框架(page.MainFrame()),也可以有多个子框架,由 iframe 标签创建产生。在playwright中,无需切换iframe,可以直接定位元素(这点要比selenium方便很多)。好了接下来我们着重来看一下page。

3.访问一个URL

page.goto("https://example.com")

4.截图

page.screenshot(path="screenshot.png")

5.监听Iframe加载(监听页面事件)

page.on("frameattached", handler)

6.定位到含有指定文字的元素

返回一个Locator:

page.get_by_text("test")  #  模糊匹配
page.get_by_text("test", exact=True)  #  精准匹配

7.返回上一页

page.go_back()
page.go_back(**kwargs)

8.前往下一页

page.go_forward()
page.go_forward(**kwargs)

9.根据选择器定位元素(CSS\Xpath)

page.locator(selector)
page.locator(selector, **kwargs)

10.项目实战

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

10.1代码设计

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

10.2参考代码
# coding=utf-8🔥# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-06-27
@author: 北京-宏哥   QQ交流群:705269076
公众号:北京宏哥
Project: 《《最新出炉》系列初窥篇-Python+Playwright自动化测试-7-浏览器的相关操作
'''# 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()
10.3运行代码

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

2.运行代码后电脑端的浏览器的动作,可以看到查询“北京宏哥”后,刷新页面执行回退到百度首页,然后有执行前进进入到搜索“北京宏哥”页面。如下图所示:

11.小结

11.1browser,context和page三层结构

browser,context和page这三层结构个人浅见:

(1)Browser可以理解为物理层,比较常用的参数为浏览器类型,headless(是否在内存中打开浏览器)以及超时时间。

(2)Context为上下文层,常用的参数为设置窗口大小以及录像路径。

(3)page为页面层,就是为了打开“可见”的页面,只有这一层才是真的访问了页面。

   关于page的介绍和讲解也非常简单,这里就是希望小伙伴或者童鞋们在脑海里留下一个印象。好了,时间不早了今天就分享到这里,感谢你耐心地阅读!

  每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

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

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

相关文章

redis夯实之路-主从复制详解

Redis中可以通过执行slaveof命令或者设置slaveof选项,让一个服务器区复制另一个服务器,被复制的为主服务器,复制的为从服务器。 复制 Redis中可以通过执行slaveof命令或者设置slaveof选项,让一个服务器区复制另一个服务器&#…

LLVM系列(1): 在微软Visual Studio下编译LLVM

参考链接: Getting Started with the LLVM System using Microsoft Visual Studio — LLVM 18.0.0git documentation 1.安装visualstudio,版本需要大于vs2019 本机环境已安装visual studio2022,省略 2安装Makefile,版本需要大…

Dockerfile构建镜像(SSH、Systemctl、nginx、tomcat 、mysql、)

目录 构建SSH镜像 构建Systemctl镜像 构建nginx镜像 构建Tomcat镜像 构建MySQL镜像 构建SSH镜像 切换到目录 /opt/sshd: cd /opt/sshd这是为了进入一个特定的目录,后续的操作将在这个目录下进行。 创建一个 Dockerfile 并使用 Vim 编辑它&#xf…

C++力扣题目617--合并二叉树

给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠&#…

什么是损失函数?

损失函数(Loss Function),也被称为代价函数(Cost Function),在机器学习和统计学中是一个非常核心的概念。它是一个衡量模型预测值与真实值之间差异的函数,用于在训练过程中指导模型参数的优化。…

python爬虫04-常见反爬

目录 1、常见反爬 2、User-Agent 2.1 伪装库:fake-useragent 3、Referer参数 4、Cookie参数 4.1 cookie是什么 4.2 cookie的级别 4.3 session 1、常见反爬 User-Agent:浏览器身份标识;Referer:请求的来源…

YOLOv5改进 | 二次创新篇 | 结合iRMB和EMA形成全新的iEMA机制(全网独家创新)

一、本文介绍 本文给大家带来的改进机制是二次创新的机制,二次创新是我们发表论文中关键的一环,为什么这么说,从去年的三月份开始对于图像领域的论文发表其实是变难的了,在那之前大家可能搭搭积木的情况下就可以简单的发表一篇论文,但是从去年开始单纯的搭积木其实发表论…

Rational Architect 安装提示:插入标注为IBM的磁盘集的第n张磁盘 未能验证位置的介质

这个问题在网上没有搜到 插入标注为IBm的磁盘集的第n张磁盘,选择目录, 应该选择RSP解压以后对应的disk1文件夹就可以正常安装,如果选择其他路径会自动卸载相当于白安

Spring Boot - JaCoCo Code Coverage

文章目录 概述如何集成pom添加插件Code Demo排除不相关的类CI/CD中使用完整POM 概述 JaCoCo(Java Code Coverage)是一个开源的Java代码覆盖率工具,它主要用于评估Java程序的测试完整性。通过跟踪测试过程中执行的代码,JaCoCo能够…

云服务器指定pip,指定python解释器

指定pip下载器: echo "alias pip/www/xxx/bin/pip3" >> ~/.bashrc source ~/.bashrc alias 指定python解释器: echo "alias python/www/xxx/bin/python3" >> ~/.bashrc source ~/.bashrc alias 检验修改情况 pip -…

【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】

前言 大家好吖,欢迎来到 YY 滴C考前速过系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《…

最小生成树 | Prim 算法

Prim 算法 算法描述 Prim 算法采用的是一种贪心的策略 每次将离连通部分的最近的点和点对应的边加入的连通部分&#xff0c;连通部分逐渐扩大&#xff0c;最后将整个图连通起来&#xff0c;并且边长之和最小。 程序代码 #include <iostream> #include <cstring&g…

大学期末考前复习卷(上)

第一题&#xff1a; 泰勒展开式求sin(x) 【问题描述】 已知sin(x)的泰勒展开式为&#xff1a; sin(x) x/1! - x^3/3! x^5/5! - x^7/7! …… 当某一项的绝对值小于ξ时&#xff0c;停止计算。 输入x及ξ的值&#xff0c;输出sin(x)的值&#xff0c;小数点后保留5位小数。…

第8章-第6节-Java中字符流的缓冲流

1、在说正题之前&#xff0c;先说一个小细节&#xff0c;不管是字节流还是字符流都要注意这个细节&#xff0c;具体看这篇博文&#xff1a;关于Java的IO流里面的方法read()的小细节 2、字符流的缓冲流&#xff1a; 1&#xff09;、BufferedWriter 方法名说明void newLine()写…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《与新能源互补和独立参加多级市场的抽蓄电站容量分配策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 这个标题涉及到抽蓄电站在能源系统中的角色&#xff0c;特别是在多级市场中的参与&#xff0c;并强调了新能源的互补性以及抽蓄电站的独立性。下面我将…

如何在企业中实施自适应人工智能?

人工智能不再是企业的选择。很快&#xff0c;它也将不再是一个区分因素。商业中的适应性人工智能正在改变格局。根据最近的统计数据&#xff0c;95%的企业以上都在追求人工智能。 因此&#xff0c;为了确保你拥有竞争优势&#xff0c;你必须期待先进的人工智能选项。适应性就是…

Oracle数据库学习入门教程

Oracle数据库学习入门教程 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我将带大家进入数据库世界的精彩旅程&#xff0c;探索Oracle数据库的奥秘…

BlockUI详细用法

BlockUI详细用法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们深入研究在前端开发中常用的交互性技术之一——“BlockUI”&#xff0c;并详…

在线的货币兑换平台源码下载

在线的货币兑换平台&#xff0c;可帮助全球各地的个人和企业将货币从一种货币兑换为另一种货币。该货币兑换平台是 Codecanyon 中最先进的脚本。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88728084

超维空间S2无人机使用说明书——61、ROS无人机4G远程控制

4G模块使用说明 引言&#xff1a;为了实现对无人机的远程控制&#xff0c;我们采用了4G通信的方案&#xff0c;该方案需要硬件以及相关软件的支持。4G通信是可选择功能&#xff0c;请确认无人机型号是否选配了4G通信。 一、4G通信方案 我们的4G通信主要通过两种方式实现&…