【Playwright+Python】手把手带你写一个自动化测试脚本

 

如何使用代理方式打开网页

 

在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下:

1、同步写法:
from playwright.sync_api import sync_playwrightproxy = {'server': 'http:/127.0.0.1:8080'}def run():with sync_playwright() as p:browser = p.chromium.launch(headless=False, proxy=proxy)page = browser.new_page()page.goto('https://www.baidu.com')title = page.title()if "百度" in title:print("打开百度成功")else:print("打开百度失败")browser.close()run()
2、异步写法:
from playwright.async_api import async_playwright
import asyncioproxy = {'server': 'http:/127.0.0.1:8080'}async def run():async with async_playwright() as p:browser = await p.chromium.launch(headless=False, proxy=proxy)page = await browser.new_page()await page.goto('https://www.baidu.com')title = await page.title()if "百度" in title:print("打开百度成功")else:print("打开百度失败")await browser.close()asyncio.get_event_loop().run_until_complete(run())

 

同步和异步写法对比

1、同步的优点:
  • 代码结构简单易懂,不需要学习async/await语法

  • 适用于小规模或简单任务

  • 调试和理解同步代码更简单

2、异步的优点:
  • 能更高效地利用系统资源,避免阻塞等待IO

  • 对于长时间操作如网络请求更高效

  • 可以支持并发执行多个任务

  • 对于大规模和复杂系统更有利

3、区别
  • 对于小任务和学习用途,同步代码结构更简单。

  • 对于需要长时间IO等待的任务(如网络请求),使用异步可以更高效。

  • 对于需要支持高并发的系统(如网站),使用异步模型可以支持更多并发连接。

  • 多线程同步会带来锁的问题,而异步避免了锁的使用。

  • 异步的FUTURE模式也更易于扩展性好,支持动态增加回调函数。

4、总结
  • 小任务用同步

  • 长时间IO任务用异步

  • 高并发系统用异步

  • 以后的功能扩展考虑异步更灵活

一般来说对于现代化系统,异步编程模型将是主流趋势。但同步在某些场景也同样易用。选择时要根据具体需求来权衡。

 

写一个自动化测试脚本

 

1、示例脚本

算是个入门的例子,关于每句话的意思,看我注释即可,示例代码如下:

import re
from playwright.sync_api import Page, expect, sync_playwrightproxy = {'server': 'http://127.0.0.1:8080'}def test_baidu():with sync_playwright() as p:browser = p.chromium.launch(headless=False, proxy=proxy)page = browser.new_page()# 跳转到baidu页面page.goto("https://www.baidu.com/")# 点击输入框page.locator("#kw").click()# 输入框输入seleniumpage.locator("#kw").fill("selenium")# 点击百度一下查询按钮page.get_by_role("button", name="百度一下").click()# 验证输入框是否输入seleniumexpect(page.locator("#kw")).to_have_value("selenium")# 验证页面是否包含文本“大家还在搜”expect(page.locator("#content_left")).to_contain_text("大家还在搜")# 退出浏览器browser.close()

 

注意:测试类和测试方法都要用test_ 前缀命名

 

2、基本操作

这是 Playwright 常用操作列表,请注意,还有许多其他操作,请务必查看定位器 API 部分以了解更多相关信息。

操作描述
locator.check()选中输入复选框
locator.click()点击元素
locator.uncheck()取消选中输入复选框
locator.hover()将鼠标悬停在元素上
locator.fill()填写表单字段,输入文本
locator.focus()聚焦元素
locator.press()按下单个键
locator.set_input_files()选择要上传的文件
locator.select_option()从下拉菜单中选择选项
3、断言操作
断言描述
expect(locator).to_be_checked()复选框处于选中状态
expect(locator).to_be_enabled()控件已启用
expect(locator).to_be_visible()元素可见
expect(locator).to_contain_text()元素包含文本
expect(locator).to_have_attribute()元素具有属性
expect(locator).to_have_count()元素列表已给出长度
expect(locator).to_have_text()元素匹配文本
expect(locator).to_have_value()输入元素具有值
expect(page).to_have_title()页面有标题
expect(page).to_have_url()页面有 URL

 

4、fixtures夹具的使用

示例代码:

import pytest
from playwright.sync_api import Page, expect, sync_playwright@pytest.fixture(scope="function", autouse=True)
def before_each_after_each(page: Page):print("before the test runs")page.goto("https://www.baidu.com/")yieldprint("after the test runs")def test_main_navigation(page: Page):page.locator("#kw").fill("万物皆可连 博客园")page.get_by_role("button", name="百度一下").click()expect(page.locator("#content_left")).to_contain_text("万物皆可连 - 博客园")

代码解释:

  • 定义了一个名为 before_each_after_each 的 fixture(夹具),它的作用域是每个测试函数,并且设置为自动应用于每个测试函数。

  • 在这个 fixture 中:打印 "before the test runs",表示测试运行前执行的操作。使用 page.goto("https://www.baidu.com/") 打开百度首页。

  • yield 关键字在这个 fixture 运行期间挂起,等待测试函数执行。测试函数将在 fixture 的环境下执行。

 

 

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

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

相关文章

Kafka精要

Apach Kafka 是一款分布式流处理框架,用于实时构建流处理应用。它有一个核心 的功能广为人知,即 作为企业级的消息引擎被广泛使用 kafka设计 Kafka 将消息以 topic 为单位进行归纳 将向 Kafka topic 发布消息的程序成为 producers. 将预订 topics 并消…

Linux内核开发-编写一个proc文件

0.前言 上一章(点击返回上一章)完成了一个内核模块的编写,实现了在内核运行时的动态加载和卸载。 在模块的开发调测过程中或者模块运行过程中,可能需要打印内核模块的变量的值或者想要动态开关模块的运行日志打印,那么…

小盒子跑大模型!基于算能BM1684X+FPGA平台实现大模型私有化部署

当前,在人工智能领域,大模型在丰富人工智能应用场景中扮演着重要的角色,经过不断的探索,大模型进入到落地的阶段。而大模型在落地过程中面临两大关键难题:对庞大计算资源的需求和对数据隐私与安全的考量。为应对这些挑…

springcloud-gateway include-expression 配置说明

在开发过程中遇到的一些配置问题,记录下来以供参考 spring-gateway版本是2.2.9-release,使用的spring cloud dependence 是 Hoxton.SR12 在依赖eureka 服务发现并自动将发现服务器加入到router中的时候,需要指定对应的服务进行添加,根据文档…

postman国内外竞争者及使用详解分析

一、postman简介 Postman 是一款广泛使用的 API 开发和测试工具,适用于开发人员和测试人员。它提供了一个直观的界面,用于发送 HTTP 请求、查看响应、创建和管理 API 测试用例,以及自动化 API 测试工作流程。以下是 Postman 的主要功能和特点…

linux的CP指令

实现 CP 指令 src 源文件 des 目标文件 执行流程: 打开源文件( src ) open 打开目标文件( des ) open 写入目标文件 write 读取 src 文件到缓存数组 read 关闭目标文件和源文件 close ./a.out src.c de…

开源网安参与编制的《代码大模型安全风险防范能力要求及评估方法》正式发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时,也带来了对安全风险防范能力的挑战。基于此,中国信通院依托中国人工智能产业发展联盟(AIIA),联合开源…

Mybatis-plus学习|性能分析插件、条件构造器、代码自动生成器

性能分析插件 我们在平时的开发中,会遇到一些慢sql。测试!druid…. MP也提供性能分析插件,如果超过这个时间就停止运行! 1、导入插件 该插件只允许在开发和测试环境中使用,故先设置开发环境为开发模式 在MP配置类中注册这个插件&#xff0…

Python:浅谈迭代器、生成器与协程的演化路径

“人生苦短,我用Python”,虽然说大量数学和统计分析库是一个重要优势,但是归根结底,Python的最大优势就是三点: 但是通常一般来讲,当扯到并发的时候,无论是多服务器、多进程、多线程、还是协程&…

C# SocketUDP服务器,组播

SocketUDP 自己即是服务器又是客户端 ,在发消息只需要改成对方ip和端口号即可 前提对方必须开启服务器 socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.72"), 8080)); 控件:Button,TextBox,RichTextBox 打开自己服务器 public…

【操作系统】信号处理与阻塞函数|时序竞态问题

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 关于阻塞函数和…

Windows环境部署MySQL_8.4.0 LTS的部署安装、验证连接以及卸载全过程实操手册

前言: 什么是 MySQL MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内&am…

8.12 矢量图层面要素单一符号使用七(随机标记填充)

文章目录 前言随机标记填充(Random Marker Fill)QGis设置面符号为随机标记填充(Random Marker Fill)二次开发代码实现随机标记填充(Random Marker Fill) 总结 前言 本章介绍矢量图层线要素单一符号中使用随…

分班查询怎么发布?

在现代教育环境中,传统的学生分班通知方式可能显得有些过时和低效。通常,这些方式依赖于纸质通知单,这不仅需要大量的物理资源进行打印和分发,而且容易出错,如丢失、错误分发或延迟。 幸运的是,现在有了更高…

心灵馆咨询系统小程序心理咨询平台聊天咨询

心灵馆咨询系统小程序:解锁你的心灵密码 💖 心灵之旅的导航者 在繁忙的现代生活中,我们时常会面临各种压力与困惑。心灵馆咨询系统小程序,如同一位贴心的导航者,引领我们探索内心的世界,寻找真正的自我。 …

shell 脚本的部分指令和操作符

终端输入两个数,判断两数是否相等,如果不相等,判断大小关系 2.已知网址www.hqyj.com,使用expr截取出www、hqyj、com,不能使用cut,不能出现数字

JavaWeb系列十九: jQuery的DOM操作 上

查找节点, 修改属性 查找属性节点: 查找到所需要的元素之后, 可以调用jQuery对象的attr()方法用来 设置/返回 它的各种属性值 设置属性值 $(“img”).attr(“width”, “300”);返回属性值 $(“img”).attr(“width”); 创建节点 创建节点: 使用jQuery的工厂函数$(): $(html标…

硬核实力再亮,玩出梦想科技发布全球首款安卓系统空间计算机

6月25日,玩出梦想科技在新加坡召开全球新品发布会,正式发布全球首款安卓系统空间计算机——玩出梦想MR,填补了空间计算机在安卓生态的空白。 作为品牌沉淀两年的破晓之作,玩出梦想MR以业内领先软硬件配置,强大自研算法…

解决了!暗影精灵8 Pro酷睿版无声音,扬声器和麦克风都没有声音!

困扰好几天的问题解决了! 暗影精灵8 Pro酷睿版无声音,扬声器和麦克风都没有声音!!方法适用于OMEN by HP Gaming Laptop 16-k0xxx(暗影精灵8 Pro酷睿版)的Windows 10声卡驱动! 朋友们&#xff…