screenshot python_Selenium3+python异常后截图(screenshot)
前言
在执行用例过程中由于是无人值守的,用例运行报错的时候,我们希望能对当前屏幕截图,留下证据。
在写用例的时候,最后一步是断言,可以把截图的动作放在断言这里,那么如何在断言失败后截图呢?
一、截图方法
1.get_screenshot_as_file(self, filename)
--这个方法是获取当前window的截图,出现IOError时候返回False,截图成功返回True。
filename参数是保存文件的路径。
Usage:
driver.get_screenshot_as_file('/Screenshots/foo.png')
2.get_screenshot_as_base64(self)
--这个方法也是获取屏幕截图,保存的是base64的编码格式,在HTML界面输出截图的时候,会用到。
比如,想把截图放到html测试报告里。
Usage:
driver.get_screenshot_as_base64()
3.get_screenshot_as_png(self)
--这个是获取屏幕截图,保存的是二进制数据,很少用到.
Usage:
driver.get_screenshot_as_png()
二、异常后截图
1.为了能抛异常,把定位登录按钮的id换了个错的id。
2.给图片命名时候加个时间戳,避免同一个文件名称被覆盖掉。
3.文件路径,这里直接写的文件名称,就是跟当前的脚本同一个路径。如果图片输出到其它文件路径,需要些文件的绝对路径了。
4.截图的结果,如果没截到图返回False,截图成功会返回True。
三、selenium实例
1.在unittest框架里写用例的时候,我们希望在断言失败的时候,对当前屏幕截图。
2.如果加try...except捕获异常后结果,此时所有的测试用例都是通过的了,会影响测试结果。解决办法其实很简单,再把异常抛出来就行了。
3.参考代码:
#coding:utf-8
from selenium importwebdriverimporttime,unittestfrom selenium.webdriver.support importexpected_conditions as ECclassLogin(unittest.TestCase):defsetUp(self):
url_login= "https://passport.cnblogs.com/user/signin"self.driver=webdriver.Firefox()
self.driver.get(url_login)deftest_01(self):'''前面输入账号密码,让正确运行到assert这一步,断言故意设置为False不成功'''
try:
self.driver.find_element_by_id("input1").send_keys(u"李**")
self.driver.find_element_by_id("input2").send_keys("xxx")#登录id是错的,定位会抛异常
self.driver.find_element_by_id("signin").click()#判断登录成功页面是否有账号:"李**"
time.sleep(3)
locator= ("id", "lnk_current_user")
result= EC.text_to_be_present_in_element(locator,u"李**")(self.driver)
self.assertFalse(result)exceptException as msg:print(u"异常原因%s"%msg)#图片名称可以加个时间戳
nowTime = time.strftime("%Y%m%d.%H.%M.%S")
self.driver.get_screenshot_as_file('%s.jpg' %nowTime)raise
deftearDown(self):
self.driver.quit()if __name__ == "__main__":
unittest.main()
整理的代码:
#-*-coding:utf-8 -*-
importosimportinspectfrom datetime importdatetimefrom functools importwraps"""此模块用于屏幕截图"""
#获取截截图保存的路径
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
img_base_path= os.path.join(base_path, 'img')#截图
defscreenshot(driver, case_name, img_base_path):
screenshotPath=os.path.join(img_base_path, case_name)
time_now= datetime.now().strftime('%Y%m%d%H%M%S')
screen_shot_name= "CheckPoint_NG.png"screen_img= screenshotPath + '_' + time_now + '_' +screen_shot_name#screen_img = os.path.join(screenshotPath, screenshotName)
driver.get_screenshot_as_file(screen_img)returnscreen_img#得到当前类的实例方法名#也就是获得用例的名称
defget_current_function_name():return inspect.stack()[1][3]#case 断言失败截图装饰器
defscreenshot_about_case(func):#保持传入的case的名称不被装饰器所改变
@wraps(func)#t = func
def get_screenshot_about_case(self, *args, **kwargs):try:
func(self,*args, **kwargs)exceptException as e:#获取case_name的名称
case_name = '{}_{} invoked'.format(self.__class__.__name__, get_current_function_name())#截屏的路径
screenshotPath =os.path.join(img_base_path, case_name)#获得现在的时间戳
time_now = datetime.now().strftime('%Y%m%d%H%M%S')#名字的一部分
screen_shot_name = "CheckPoint_NG.png"
#组装图片需要传入的路径和推片名称
screen_img = screenshotPath + '_' + time_now + '_' +screen_shot_name#截图并保存到相应的名称的路径
self.driver.get_screenshot_as_file(screen_img)raiseereturn get_screenshot_about_case
screenshot python_Selenium3+python异常后截图(screenshot)相关推荐
- Python 异常后变量的赋值
例如:如果某值不存,但是必须需要此变量拥有一个值,在出现此类的异常,我们要主动赋值 try:pwentry = pwd.Passwd(self.cfg).getpwnam(self.username) ...
- python抛出异常 后如何接住,Python 异常的捕获、异常的传递与主动抛出异常操作示例...
本文实例讲述了Python 异常的捕获.异常的传递与主动抛出异常操作.分享给大家供大家参考,具体如下: 异常的捕获 demo.py(异常的捕获): try: # 提示用户输入一个整数 num = in ...
- python获取桌面截图
python获取桌面截图有多种方式,常用的两个如下: 1.PIL中的ImageGrab模块 使用PIL中的ImageGrab模块简单,但是效率有点低,截屏一次需110ms. import time i ...
- Python培训教程分享:Python异常机制
在学习Python技术的时候,我们经常会遇到一些异常,例如导致程序在运行过程中出现的中断或退出,我们都称之为异常,大多数的异常都不会被程序处理,而是以错误信息的形式展现出来.本期Python培训教 ...
- 会python可以从事什么工作-Python入门后,想要从事自由职业可以做哪方面工作?...
Python入门后,想要从事自由职业可以做哪方面工作? 1.爬虫 很多人入门Python的必修课之一就是web开发和爬虫.但是这两项想要赚钱的话,就必须知道开发什么爬什么数据才能赚钱.如果你都不知道的 ...
- python错误-python异常与错误区别
错误和异常概念 错误: 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行 1.程序遇到逻辑或者算法问题 2.运 ...
- python 异常_一文掌握 Python 异常处理的所有知识点
异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题.在Python中,和部分高级语言一样,使用了try/except/fin ...
- Python异常及处理方法总结
原文:https://blog.csdn.net/polyhedronx/article/details/81589196 作者:polyhedronx 调试Python程序时,经常会报出一些异常,异 ...
- Python异常捕获及自定义异常类
Python异常捕获及自定义异常类 一.什么是异常? 异常是一个与业务逻辑无关的BUG,一个潜在错误或者网络错误事件等,如:尚未实现的函数,缩进错误,Python语法错误等.该事件可能会在程序执行过程 ...
最新文章
- 如何创建自己的ESLint配置包
- golang struct 切片数组去重
- win7计算机内存占用高,WIN7系统电脑内存占用高的解决办法有哪些
- 排序算法系列:选择排序算法
- AD9834 DDS 使用经验
- HiveMQ broker maven项目转化及运行环境搭建
- 蓝桥杯之第几个幸运数
- java判断闰年通过多态方法_04748《Java语言程序设计》实验指导书.doc
- Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
- 抽象线条发生器fcpx插件:Abstract Pen Animator Mac
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(6) - 逻辑指令 比较指令
- Arduino+Avr libc制作Badusb原理及示例讲解
- Unix 电子书大全
- C#程序通过模板自动创建Word文档.doc
- linux内核多个补丁,一个令人惊叹的Linux内核补丁
- 用20 ETH的成本撬动3000万美元收益——Harvest攻击全复盘
- solidity学习-投票
- 为什么点火信号叫KL15,蓄电池电压叫KL30
- 图解 Spring 循环依赖,看过之后再也不怕面试被问到了!
- python kivy 手势识别基本代码