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 import webdriver
import time,unittest
from selenium.webdriver.support import expected_conditions as EC
class Login(unittest.TestCase):
def setUp(self):
url_login = "https://passport.cnblogs.com/user/signin"
self.driver = webdriver.Firefox()
self.driver.get(url_login) def test_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)
except Exception 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 def tearDown(self):
self.driver.quit() if __name__ == "__main__":
unittest.main()
整理的代码:
# -*-coding:utf-8 -*-
import os
import inspect
from datetime import datetime
from functools import wraps """
此模块用于屏幕截图
"""
# 获取截截图保存的路径
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
img_base_path = os.path.join(base_path, 'img') # 截图
def screenshot(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)
return screen_img # 得到当前类的实例方法名
# 也就是获得用例的名称
def get_current_function_name():
return inspect.stack()[1][3] # case 断言失败截图装饰器
def screenshot_about_case(func):
# 保持传入的case的名称不被装饰器所改变
@wraps(func)
# t = func
def get_screenshot_about_case(self, *args, **kwargs):
try:
func(self, *args, **kwargs)
except Exception 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)
raise e
return get_screenshot_about_case
Selenium3+python异常后截图(screenshot)的更多相关文章
- Selenium2+python自动化60-异常后截图(screenshot)
前言 在执行用例过程中由于是无人值守的,用例运行报错的时候,我们希望能对当前屏幕截图,留下证据. 在写用例的时候,最后一步是断言,可以把截图的动作放在断言这里,那么如何在断言失败后截图呢? 一.截图方 ...
- Selenium2+python自动化60-异常后截图(screenshot)【转载】
前言 在执行用例过程中由于是无人值守的,用例运行报错的时候,我们希望能对当前屏幕截图,留下证据. 在写用例的时候,最后一步是断言,可以把截图的动作放在断言这里,那么如何在断言失败后截图呢? 一.截图方 ...
- selenium3 + python - 异常处理截图 screenshot
一.截图方法 1.get_screenshot_as_file(self, filename) --这个方法是获取当前window的截图,出现IOError时候返回False,截图成功返回True. ...
- Appium+Python之异常自动截图
运行过程中出现异常情况,我们怎么直观的看到呢?最简单的方法就是可以把异常现象截图下来. 思路:我这里采用get_screenshot_as_file(filename)方法,filename通过获取时 ...
- python 异常
引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理p ...
- Python安装后在CMD命令行下出现“应用程序无法启动.............”问题
问题存在之一:系统是刚刚重做的精简版服务器系统(阉割版) AN就是在阿里云上刚开的Windows Server 2008 系统上碰到的 吓尿了都 症状: 正常安装python环 ...
- Python各种花式截图工具,截到你手软
前言: 最近,项目中遇到了一个关于实现通过给定URL,实现对网页屏幕进行截图的一个功能,前面代码中已经用python的第三方库实现了截图功能,但在上线以后出现了一些bug,所以就改bug的任务就落在了 ...
- Python异常基础
一.常见异常及场景举例 1.AssertionError 断言失败,断言是调试中常用(表示自己并不常用┑( ̄Д  ̄)┍)手段 举例: def foo(s): n = int(s) assert n ! ...
- python——异常except语句用法与引发异常
except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,< ...
随机推荐
- pandas索引操作
Pandas的索引操作 索引对象Index 1. Series和DataFrame中的索引都是Index对象 示例代码: print(type(ser_obj.index)) print(type(d ...
- Select/Poll/Epoll异步IO
IO多路复用 同步io和异步io,阻塞io和非阻塞io分别是什么,有什么样的区别? io模式 对于一次io 访问(以read为例),数据会先拷贝到操作系统内核的缓冲区,然后才会从操作系统内核的缓冲区拷 ...
- mfs监控
web gui 监控 gui_info.jpg (143.72 KB, 下载次数: 83) gui_most.jpg (209.36 KB, 下载次数: 82) gui_master_info.jpg ...
- js通过session判断登录与否并确定跳转页面以及回车按钮提交
本文实例讲述了js判断登录与否并确定跳转页面的方法.分享给大家供大家参考.具体如下: 使用session存储,确定用户是否登录,从而确定页面跳转至哪个页面. 判断本地有无customerID func ...
- springboot @Value 类中读取配置文件 .properties null 原因和解决方案
问题:在一个工具类中,通过@Value来映射配置文件的值,得到的总是null 原因:不能用new工具类的方式,应该是用容器注册(@Autowried)的方式使用此工具类,就能得到配置文件里的值 上代码 ...
- Docker学习笔记_安装和使用Apache
一.准备 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04 3.账号:docker 二.安装 1.搜索镜像 ...
- 在C语言中如何嵌入python脚本
最近在写配置文件时,需要使用python脚本,但脚本是一个监控作用,需要它一直驻留在linux中运行,想起C语言中能够使用deamon函数来保留一个程序一直运行,于是想到写一个deamon,并在其中嵌 ...
- Extend volumn in ubuntu 14.04
运行环境: ubuntu 14.04, VMware12.5.7 1. VMware上点击 虚拟机->设置->硬盘(SCSI)->扩展选项,设置自己希望的ubuntu磁盘运行空间大小 ...
- Spring--入门第二天
一.通过工厂方法配置bean Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean. 工厂 Bean 跟普通Bean不同, 其返回的对象不是 ...
- [GO]局部变量的特点
package main import "fmt" func main() { //定义在{}里的变量就是局部变量,只能在{}里起作用 //作用域,变量起作用的范围 //执行到定义 ...