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

本文主要是介绍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屏幕截图功能,并按照日期时间格式保存图片。这样,我们就可以在自动化测试过程中轻松地对测试结果进行截图保存,以便后续的分析和报告。

这篇关于Selenium屏幕截图技巧:实现自动化截屏并按日期时间格式保存图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077499

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S