Selenium + Python 自动化测试08(截图)

news2024/9/23 3:32:07

        我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了滑块的操作方法,本篇文章我们讲述一下截图的操作方法。希望能够帮到爱学的小伙伴。

         在实际的测试项目组中我们经常要截屏保存报错信息,以便后续人工确认是否是真的bug。和对应的日志相对应。有时登录或者注册有图片上的验证码需要验证,也需要截图验证码,然后分析识别图片上的文字。

1、截屏的方法

页面截屏比较简单,可以使用selenium自带的方法:save_screenshot

下面以免费Swag Labs的网址(https://www.saucedemo.com/)为例进行说明:

练习代码如下:

#打开浏览器,并最大化

driver.get("https://www.saucedemo.com/")   #打开练手的网站

driver.maximize_window()

time.sleep(3)

now = time.strftime("%Y-%m-%d %H_%M_%S")

pictures=now+".png"

driver.save_screenshot(pictures)

运行脚本以后可以看到产生对应的图片,在这个项目的文件夹下。

图片为了不重复命名,这里用了日期+时间的方法。

2、元素的截图

验证码如果要用图像识别的方式去处理的话,需要先对验证码元素进行截图。

如下例子:

前面是上一节滑块的内容,黄色是这次新增:

driver.get("https://passport.ctrip.com/user/reg/home")

driver.maximize_window()

time.sleep(3)

# 点击同意并继续

driver.find_element_by_xpath("//*[@id='agr_pop']/div[3]/a[2]").click()

# 滑块的元素

slider = driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-drop-btn")

print(slider.size['width'])

print(slider.size['height'])

# 滑块区域的元素

slide_range = driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-bg-bar")

print(slide_range.size['width'])

print(slide_range.size['height'])



# 拖动滑块

ActionChains(driver).drag_and_drop_by_offset(slider, slide_range.size['width'], -slider.size['height']

                                             ).perform()

print("滑动成功")

time.sleep(3)

now = time.strftime("%Y-%m-%d %H_%M_%S")

pictures = now + ".png"



driver.save_screenshot(pictures)

# 元素的位置

captcha_image = driver.find_element_by_class_name("cpt-small-img")



# 获取元素的位置和大小

left = captcha_image.location['x']

top = captcha_image.location['y']

right = left +captcha_image.size["width"]

bottom =top+captcha_image.size["width"]

# 截取屏幕截图

im = Image.open(pictures)

im = im.crop((left,top,right,bottom))

im.save("captcha.png")

运行脚本查看文件夹下有对应的截图:        

好了,今天就分享到这里。

每天进步一点点,加油!

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

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

相关文章

做个一套C#面试题

1.int long float double 分别是几个字节 左到右范围从小到大:byte->short->int->long->float->double 各自所占字节大小:1字节、2字节、4字节、8字节、4字节、8字节 2.System.Object四个公共方法的申明 namespace System {//// 摘要…

C#如何解决引用类型的“深度”克隆问题

前言 在C#中我们new一个引用类型的对象称为对象1,如果我们再次new一个引用类型的对象称为对象2,如果直接将第一个对象直接赋值给第二个对象,然后如果我们这时候改变对象2的值,你会发现对象1的值也会被更改,这就是引用…

在ubuntu系统上安装nginx以及php的部署

1、安装依赖包 apt-get install gcc apt-get install libpcre3 libpcre3-dev apt-get install zlib1g zlib1g-dev sudo apt-get install openssl sudo apt-get install libssl-dev 2、到nginx官方下载 官方地址:nginx: download 图中下载的nginx1.22版本&#…

Python | Leetcode Python题解之第322题重新安排行程

题目: 题解: class Solution:def findItinerary(self, tickets: List[List[str]]) -> List[str]:def dfs(curr: str):while vec[curr]:tmp heapq.heappop(vec[curr])dfs(tmp)stack.append(curr)vec collections.defaultdict(list)for depart, arri…

element-ui周选择器,如何获取年、周、起止日期?

说明 版本:vue2、element-ui2.15.14 element-ui的日期选择器可以设为周,即typeweek,官方示例如下: 如果你什么都不操作,那么获取的周的值为: value1: Tue Aug 06 2024 00:00:00 GMT0800 (中国标准时间)如…

分布式存储ceph知识点整理

一、Ceph概述 如何选择存储 底层协议兼容性产品要有定位,功能有所取舍针对特定市场的应用存储被市场认可的存储系统 稳定性是第一位的性能第二数据功能要够用 一)存储分类 1、本地存储 本地的文件系统,不能在网络上用。 如:ext3、…

WPF学习(11)-ToolTip控件(提示工具)+Popup弹出窗口

ToolTip控件 ToolTip控件继承于ContentControl,它不能有逻辑或视觉父级,意思是说它不能以控件的形式实例化,它必须依附于某个控件。因为它的功能被设计成提示信息,当鼠标移动到某个控件上方时,悬停一会儿,…

【React】实现输入框切换

需求 类似designable-antd平台的这个切换功能: 点击右边按钮,可以切换不同的输入框样式。 实现 维护一个type-component的类型数组遍历数组,找到当前组件类型并渲染当切换输入框样式的时候,获取下一个组件类型并渲染。如果为最…

UE5——如何在UI界面中显示鼠标并可以点击按钮

首先进入UI蓝图的图标界面,在Event Construct节点 后连接一个Set Input Model UI Only去设置用户的输入模式 同时使用Get Player Controller获取玩家控制器并连接到Set Input Model UI Only的Player Controller 连接好后是这个样子。 此时整个UI界面只能获取到鼠标的…

Apple 智能基础语言模型

Introducing Apple’s On-Device and Server Foundation Models technical details June 10, 2024 在2024年的全球开发者大会上,苹果推出了Apple Intelligence,这是一个深度集成到iOS 18、iPadOS 18和macOS Sequoia中的个人智能系统。Apple Intelligen…

【系统响应慢排查所需命令】ps -ef、grep、jstat、pmap 、sort 、head 、jmap 、dump.hprof

列出所有进程,找到需要的进程id【ps -ef】 UID: 进程所属的用户 ID。 PID: 进程 ID。 PPID: 父进程 ID。 C: CPU 使用率。 STIME: 进程启动的时间。 TTY: 与进程关联的终端。 TIME: 进程占用的 CPU 时间。 CMD: 启动进程的命令。 假如是搜索功能缓慢&#x…

算法板子:分解质因数

目录 1. 质因数的概念 2. 代码 1. 质因数的概念 这道题的目的是找到x这个数的质因数的底数和指数。例如280这个数&#xff0c;可以看成2^3 * 5^1 * 7^1&#xff0c;其中2、5和7分别是三个质因数的底数&#xff0c;3、1、1分别是三个质因数的指数。 2. 代码 #include <io…

Java | Leetcode Java题解之第332题重新安排行程

题目&#xff1a; 题解&#xff1a; class Solution {Map<String, PriorityQueue<String>> map new HashMap<String, PriorityQueue<String>>();List<String> itinerary new LinkedList<String>();public List<String> findItine…

onnxruntime和tensorrt动态输入推理

onnxruntime动态输入推理 lenet的onnxruntime动态输入推理 导出下面的onnx模型&#xff1a; 可以看到&#xff0c;该模型的输入batch是动态的。 onnx动态输入推理&#xff08;python&#xff09;&#xff1a; import cv2 import numpy as np import onnxruntime from path…

AI 手机的技术展望

某某领导问到我&#xff0c;AI手机这个产业发展如何&#xff1f;对于&#xff0c;地方科技园区&#xff0c;应该如何发展相关产业&#xff1f;我一时还真说不上来&#xff0c;于是&#xff0c;查了一下资料&#xff0c;大概应对了一下。 一&#xff1a;AI手机的定义 首先&…

《车辆路径规划问题》专栏_安全提示3——关于抄袭并通过其本人有偿获取内容的安全提示

近期经粉丝反馈&#xff0c;咸鱼用户《白芷归露》 未经允许&#xff0c;盗用本人原创代码 &#xff1a; 【自适应大邻域算法(ALNS)求解MDHFVRPTW『Py』】 本人在此声明&#xff0c;此咸鱼号 非本博主运营&#xff0c;其行为与本人无关&#xff0c;如有在处上当受骗者&#xf…

【初阶数据结构题目】18.设计循环队列

设计循环队列 点击链接答题 思路&#xff1a; 循环队列&#xff0c;空间固定。 这里我们可以用数组来实现循环队列。 如何判断队列是否为满&#xff1f; 多申请一块空间 (rear1)%(k1) front 如何判断队列是否为空&#xff1f; rear front 代码&#xff1a; //定义循环队列的…

typora数学公式

typora是一款可以写markdown文档的软件&#xff0c;感兴趣的小伙伴可以看我的另一篇关于typora的文章&#xff1a;http://t.csdnimg.cn/6qkLt 以上是基本的数学公式。

Python | Leetcode Python题解之第331题验证二叉树的前序序列化

题目&#xff1a; 题解&#xff1a; class Solution:def isValidSerialization(self, preorder: str) -> bool:pre 1for i in preorder.split(,):if i.isdigit():if pre 0:return Falsepre 1else:if pre 0:return Falsepre - 1return pre 0

node安装及环境变量配置

1、安装node 安装地址 > https://nodejs.org/en/ 选择 LTS 长期维护的稳定版本 在电脑 window R cmd&#xff0c;打开终端命令行输入node -v 查看node版本&#xff0c;说明安装好了 vue3要求node版本至少是10.0以上 npm -v&#xff0c;安装了node之后本地会自动安装工具…