Selenium屏幕截图技巧:实现自动化截屏并按日期时间格式保存图片

在自动化测试过程中,我们经常需要对测试结果进行截图保存,以便于后续的分析和报告。Selenium WebDriver提供了丰富的屏幕截图功能,可以帮助我们轻松实现这一需求。本文将介绍如何使用Selenium WebDriver进行屏幕截图,并按照日期时间格式保存图片。

# 导入所需库
from selenium import webdriver# 创建一个webdriver实例
driver = webdriver.Chrome()# 打开一个网页
driver.get("https://www.example.com")# 保存屏幕截图为指定文件名
driver.save_screenshot("screenshot.png")# 获取屏幕截图的base64编码字符串
screenshot_base64 = driver.get_screenshot_as_base64()# 获取屏幕截图并保存为指定路径的文件
driver.get_screenshot_as_file("screenshot_path/screenshot.png")# 获取屏幕截图的二进制文件数据
screenshot_png = driver.get_screenshot_as_png()# 关闭webdriver实例
driver.quit()

操作思路

首先,我们需要导入相关的库和模块:

import os
from selenium import webdriver
from time import sleep, strftime, localtime, time
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By

接下来,我们创建一个名为TestCase的类,用于封装测试用例。在__init__方法中,我们初始化Chrome浏览器驱动,并最大化浏览器窗口,然后打开百度首页。

class TestCase(object):def __init__(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.get('https://www.baidu.com/')

test1方法中,我们在搜索框中输入关键词"selenium",点击搜索按钮,等待2秒后,使用save_screenshot方法将屏幕截图保存为baidu.png

def test1(self):self.driver.find_element(By.ID,'kw').send_keys('selenium')self.driver.find_element(By.ID,'su').click()sleep(2)self.driver.save_screenshot('baidu.png')

test2方法中,我们在搜索框中输入关键词"selenium",点击搜索按钮,等待2秒后,使用get_screenshot_as_pngget_screenshot_as_base64方法分别获取屏幕截图的二进制数据和base64编码。

def test2(self):self.driver.find_element(By.ID,'kw').send_keys('selenium')self.driver.find_element(By.ID,'su').click()sleep(2)pic = self.driver.get_screenshot_as_png()print('pic:',pic)pic1 = self.driver.get_screenshot_as_base64()print('pic:',pic)print('pic1:',pic1)

test3方法中,我们在搜索框中输入关键词"selenium",点击搜索按钮,等待2秒后,使用strftime函数生成截图文件名,然后使用save_screenshot方法将屏幕截图保存为该文件名的png文件。

def test3(self):self.driver.find_element(By.ID,'kw').send_keys('selenium')self.driver.find_element(By.ID,'su').click()sleep(2)st = strftime("%Y-%m-%d-%H-%M-%S",localtime(time()))fime_name = st+'.png'self.driver.save_screenshot(fime_name)

test4方法中,我们在搜索框中输入关键词"selenium",点击搜索按钮,等待2秒后,使用strftime函数生成截图文件名,然后将屏幕截图保存到与脚本所在目录同级的scrennshot文件夹中。如果该文件夹不存在,则创建该文件夹。

def test4(self):self.driver.find_element(By.ID, 'kw').send_keys('selenium')self.driver.find_element(By.ID, 'su').click()sleep(2)st = strftime("%Y-%m-%d-%H-%M-%S", localtime(time()))fime_name = st + '.png'current_file_path = os.path.abspath(__file__)current_dir = os.path.dirname(current_file_path)parent_dir = os.path.dirname(current_dir)screenshot_dir = os.path.join(parent_dir, 'scrennshot')if not os.path.exists(screenshot_dir):os.makedirs(screenshot_dir)file_path = os.path.join(screenshot_dir, fime_name)self.driver.get_screenshot_as_file(file_path)

最后,在主函数中,我们创建一个TestCase对象,并调用test4方法执行测试用例。

if __name__ == '__main__':case = TestCase()case.test4()

完整代码:

import os
from selenium import webdriver
from time import sleep, strftime, localtime, time
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import Byclass TestCase(object):def __init__(self):# 初始化Chrome浏览器驱动self.driver = webdriver.Chrome()# 最大化浏览器窗口self.driver.maximize_window()# 打开百度首页self.driver.get('https://www.baidu.com/')def test1(self):# 在搜索框中输入关键词 "selenium"self.driver.find_element(By.ID,'kw').send_keys('selenium')# 点击搜索按钮self.driver.find_element(By.ID,'su').click()# 等待2秒sleep(2)# 保存截图为baidu.pngself.driver.save_screenshot('baidu.png')def test2(self):# 在搜索框中输入关键词 "selenium"self.driver.find_element(By.ID,'kw').send_keys('selenium')# 点击搜索按钮self.driver.find_element(By.ID,'su').click()# 等待2秒sleep(2)# 获取截图的二进制数据pic = self.driver.get_screenshot_as_png()print('pic:',pic)# 获取截图的base64编码pic1 = self.driver.get_screenshot_as_base64()print('pic:',pic)print('pic1:',pic1)def test3(self):# 在搜索框中输入关键词 "selenium"self.driver.find_element(By.ID,'kw').send_keys('selenium')# 点击搜索按钮self.driver.find_element(By.ID,'su').click()# 等待2秒sleep(2)# 生成截图文件名st = strftime("%Y-%m-%d-%H-%M-%S",localtime(time()))fime_name = st+'.png'# 保存截图self.driver.save_screenshot(fime_name)def test4(self):# 在搜索框中输入关键词 "selenium"self.driver.find_element(By.ID, 'kw').send_keys('selenium')# 点击搜索按钮self.driver.find_element(By.ID, 'su').click()# 等待2秒sleep(2)# 生成截图文件名st = strftime("%Y-%m-%d-%H-%M-%S", localtime(time()))fime_name = st + '.png'# 获取当前文件路径current_file_path = os.path.abspath(__file__)# 获取当前文件所在目录current_dir = os.path.dirname(current_file_path)# 获取当前文件所在目录的上一级目录parent_dir = os.path.dirname(current_dir)# 拼接截图保存目录screenshot_dir = os.path.join(parent_dir, 'scrennshot')# 如果截图保存目录不存在,则创建该目录if not os.path.exists(screenshot_dir):os.makedirs(screenshot_dir)# 拼接截图文件完整路径file_path = os.path.join(screenshot_dir, fime_name)# 保存截图到指定路径self.driver.get_screenshot_as_file(file_path)if __name__ == '__main__':case = TestCase()# case.test1()# case.test2()# case.test3()case.test4()

通过以上代码,我们可以实现Selenium屏幕截图功能,并按照日期时间格式保存图片。这样,我们就可以在自动化测试过程中轻松地对测试结果进行截图保存,以便后续的分析和报告。

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

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

相关文章

反激开关电源整流桥选型及计算

整流桥的作用就是把输入交流电压整形成直流电压,把正弦波整成馒头波,由于整流管的单向导电 性,在输入电压瞬时值小于滤波电容上电压时整流桥,在这个时候是不导通的,使整流桥的电流变 成2-3ms左右的窄脉冲。为获得所需…

openEuler2203SP1ks自动化安装

需求: 1、legacy启动 2、/boot分区1G,剩余给/ 3、创建root密码和一个普通用户user,密码Hello2024 4、最小化安装(选上development、legacy-unix、security-tools、standard) 5、关闭firewalld、selinux 6、增加安…

企业级-PDF文件下载

作者:fyupeng 技术专栏:☞ https://github.com/fyupeng 项目地址:☞ https://github.com/fyupeng/rpc-netty-framework 留给读者 一、介绍 文件下载在浏览器可以根据响应头设置纯下载和直接打开两种方式。 二、代码 RequestMapping("/…

【数据结构】选择题

在数据结构中,从逻辑上可以把数据结构分为(线性结构和非线性结构) 当输入规模为n时,下列算法渐进复杂性中最低的是() 时间复杂度 某线性表采用顺序存储结构,每个元素占4个存储单元&#xf…

13.3 Go 性能优化

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【MAVEN学习 | 第1篇】Maven介绍与安装

文章目录 前言 一. Maven主要作用1.1 依赖管理1.2 项目构建 二. Maven安装和配置2.1 安装2.2 配置环境变量2.3 命令测试2.4 配置文件(1)依赖本地缓存位置(本地仓库位置)(2)配置国内阿里镜像(3&a…

[开源软件] CCCoreLib;函数bool Delaunay2dMesh::buildMesh,为什么返回的是false

文章目录 简介问题函数bool Delaunay2dMesh::buildMesh,为什么返回的是false?简介 请参考网址 https://github.com/CloudCompare/CCCoreLib 问题函数bool Delaunay2dMesh::buildMesh,为什么返回的是false? https://ask.csdn.net/questions/8120140 这个问答里提到了一个…

WPS相同字体但是部分文字样式不一样解决办法

如下图,在使用wps编辑文档的时候发现有些电脑的文字字体很奇怪,但是把鼠标移到这个文字的位置,发现它和其他正常文字的字体是一样的,都是仿宋_GB2312 正常电脑的文字如下图所示 打开C:\Windows找到Fonts这个文件夹 把仿宋_GB2312这…

【启明智显产品介绍】工业级HMI芯片Model3芯片详解(二)图像显示

Model3芯片是一款集大容量存储、宽温操作范围及多功能接口于一身的MCU,配备了 2D 图像加速引擎和 PNG 解码/JPEG 编解码引擎,可以满足各类交互设计场景和多媒体互动需求,具有高可靠性、高安全性、高开放度的特点,可以面向于泛工业…

使用阿里云仓库当做yum源方法

第一步:将 /etc/yum.repos.d 里创建的local.repo里的文件移动到repo.bak目录下,mv repo.bak/*.repo ./ 把*.repo移出来(也可以是别的备份目录) 第二步:将可以连外网的系统打开,执行wget -O /etc/yum…

Stable Diffusion 3 大模型文生图实践

windows教程2024年最新Stable Diffusion本地化部署详细攻略,手把手教程(建议收藏!!)_stable diffusion 本地部署-CSDN博客 linux本地安装教程 1.前期准备工作 1)创建conda环境 conda create --name stable3 python3.10 2)下…

【UBEMX安装和使用】

UBEMX安装 1. UBEMX介绍2. 官网下载软件3. 安装步骤下载和关联的STM32Cube固件包 1. UBEMX介绍 STM32CubeMX是一种图形工具,通过分步过程可以非常轻松地配置STM32微控制器和微处理器,以及为Arm Cortex-M内核或面向Arm Cortex-A内核的特定Linux设备树生成…

Flutter调用本地web

前言: 在目前Flutter 环境中,使用在线 webview 是一种很常见的行为 而在 app 环境中,离线使用则更有必要 1.环境准备 将依赖导入 2.引入前端代码 前端代码有两种情况 一种是使用打包工具 build 而来的前端代码 另一种情况是直接使用 HTML 文件 …

YoloV8改进策略:Block篇|即插即用|StarNet,重写星操作,使用Block改进YoloV8(全网首发)

摘要 本文主要集中在介绍和分析一种新兴的学习范式——星操作(Star Operation),这是一种通过元素级乘法融合不同子空间特征的方法,通过元素级乘法(类似于“星”形符号的乘法操作)将不同子空间的特征进行融…

由浅入深,走进深度学习(1)

本次内容主要是和大家分享,一起学习深度学习相关知识 需要使用到的相关库有Pytorch(最好是gpu,如果没有gpu那就使用cpu的) Pillow库 内容一:数据加载 在这里的数据加载,就有两种方式可以选择&#xff1…

java:动态代理和cglib代理的简单例子

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89457803 # 项目代码 【pom.xml】 <dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version&…

WGCLOUD的web ssh提示websocket服务连接已断开

这个问题一般是server主机没有开放端口9998&#xff0c;因为9998是web ssh的端口&#xff0c;需要开放 我们只要在防火墙&#xff0c;或者安全软件&#xff0c;把这个端口开放了就可以了

小白学-WEBGL

第一天&#xff1a; 1.canvas和webgl的区别 Canvas 和 WebGL 都是用于在网页上绘制图形的技术&#xff0c;它们通过浏览器提供的 API 使开发者能够创建丰富的视觉内容&#xff0c;但它们的工作原理和用途有所不同。 Canvas Canvas API 提供了一个通过 JavaScript 和 HTML <…

刷题——链表节点,奇偶重排

链表的奇偶重排_牛客题霸_牛客网 给定一个单链表&#xff0c;请设定一个函数&#xff0c;将链表的奇数位节点和偶数位节点分别放在一起&#xff0c;重排后输出。 注意是节点的编号而非节点的数值。 数据范围&#xff1a;节点数量满足 0≤&#x1d45b;≤1050≤n≤105&#x…

MATLAB基础应用精讲-【数模应用】双因素方差(附MATLAB、python和R语言代码实现)

目录 前言 几个相关概念 算法原理 什么是双因素方差分析? 双因素方差分析的假设和限制是什么? 双因素方差分析的假说是什么? 双因素方差分析中的交互作用 双因素方差分析步骤 基本原理 SPSSAU 疑难解惑 均方平方和类型? 事后多重比较的类型选择说明? 事后多…