封装了三个类来实现这个功能:

1.DataUtil.py 用于获取当前的日期以及时间,用于生成保存截图文件的目录名,代码如下:

#encoding=utf-8
import time
from datetime import datetime '''
本文件主要用于获取当前的日期以及时间,
用于生成保存截图文件目录名
''' def currentDate():
date = time.localtime()
# 构造今天的日期字符串
today = str(date.tm_year) + "-" + str(date.tm_mon) + "-" + str(date.tm_mday)
return today def currentTime():
timeStr = datetime.now()
# 构造当前时间字符串
now = timeStr.strftime('%H-%M-%S')
return now if __name__ == "__main__":
print currentDate()
print currentTime()

FileUtil.py 主要用于创建目录,用于存放异常截图,代码如下:

#encoding=utf-8
from DateUtil import currentDate, currentTime
import os '''
本文件主要用于创建目录,用于存放异常截图,
创建目录的方法仅供大家参考,将来用于根据测试
需要创建测试人员需要的目录或文件等
''' def createDir():
# 获得当前文件所在目录绝对路径
currentPath = os.path.dirname(os.path.abspath(__file__))
# 获取今天的日期字符串
today = currentDate()
# 构造以今天日期命名的目录的绝对路径
dateDir = os.path.join(currentPath, today)
print dateDir
if not os.path.exists(dateDir):
# 如果已今天日期命名的目录不存在则创建
os.mkdir(dateDir)
# 获得当前的时间字符串
now = currentTime()
# 构造以当前时间命名的目录的绝对路径
timeDir = os.path.join(dateDir, now)
print timeDir
if not os.path.exists(timeDir):
# 如果已当前时间命名的目录不存在则创建
os.mkdir(timeDir)
return timeDir if __name__=='__main__':
createDir()

3. Failure_Capture.py 截屏方法封装,代码如下:

#encoding=utf-8
from selenium import webdriver
import unittest, time, os
from FileUtil import createDir
import traceback # 创建存放异常截图的目录,并得到本次实例中存放图片目录的绝对路径,
# 并且作为全局变量,以供本次所有测试用例调用
picDir = createDir() def takeScreenshot(driver, savePath, picName):
# 封装截屏方法
# 构造屏幕截图路径及图片名
# 因为Windows默认编码是GBK,而传入的图片名为utf8编码,
# 所以这里需要进行转码,以便让图片名中的中文字符能正常显示
picPath = os.path.join(savePath, str(picName).decode("utf-8").encode("gbk")\
+ ".png")
try:
# 调用WebDriver提供的get_screenshot_as_file()方法,
# 将截取的屏幕图片保存为本地文件
driver.get_screenshot_as_file(picPath)
except Exception, e:
# 打印异常堆栈信息
print traceback.print_exc() class TestFailCaptureScreen(unittest.TestCase): def setUp(self):
# 启动Firefox浏览器
self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer") def testSoGouSearch(self):
url = "http://www.sogou.com"
# 访问搜狗首页
self.driver.get(url)
try:
self.driver.find_element_by_id("query").\
send_keys(u"光荣之路自动化测试")
self.driver.find_element_by_id("stb").click()
time.sleep(3)
# 断言页面的代码中是否存在“事在人为”这4个关键字,
# 因为页面中没有这4个字,所以会触发except语句的执行,并触发截图操作
self.assertTrue(u"事在人为" in self.driver.page_source, \
"“事在人为”关键字串在页面源代码中未找到")
except AssertionError, e:
# 调用封装好的截图方法,进行截图并保存在本地磁盘
takeScreenshot(self.driver, picDir, e)
except Exception, e:
print traceback.print_exc()
takeScreenshot(self.driver, picDir, e) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()

webdriver高级应用- 测试过程中发生异常或断言失败时进行屏幕截图的更多相关文章

  1. CASE:DB shutdown/open 过程中发生异常导致JOB不能自动执行

    CASE:DB shutdown/open 过程中发生异常导致JOB不能自动执行 现象: 一个DB中的所有JOB在3月25日之后就不再自动运行,查询DBA_JOBS,发现LAST_DATE定格在3月2 ...

  2. 打开CAD时出现“acvmtools.arx ARX命令中发生异常

    打开CAD时出现“acvmtools.arx ARX命令中发生异常     解决办法1: 试试进入CAD安装的目录,删掉它acvmtools.arx,重新打开cad.(注:acvmtools.arx一 ...

  3. BackgroundWorker的DoWork方法中发生异常无法传递到RunWorkedCompleted方法

    在使用C#的BackgroundWorker时需要在UI界面上显示DoWork中发生的异常,但怎么调试都无法跳转到界面上,异常也不会传递到RunWorkerCompleted方法中(e.Error为空 ...

  4. webdriver高级应用- 浏览器中新开标签页(Tab)

    #encoding=utf-8 import unittest from selenium import webdriver import time import win32api, win32con ...

  5. eclipse运行tomcat中发生异常重启后tomcat端口被占用

    在任务管理器关闭javaw进程即可,一般此时会有两个以上javaw进程,关闭其中占用内存较少的那个 可用netstat -ano命令查看端口占用情况

  6. .Java中的异常、断言、日志【草稿下,Log4j专题】

    (本章主要讲解Java里面比较核心的一块内容--异常处理,Java异常处理机制,一致都是比较复杂的一块,而很多时候如果写程序的时候能够适当地注意对应的一些异常处理情况,那么就会在开发过程节省一大部分时 ...

  7. java中的异常机制(编译时异常)

    / * 1 异常机制的原理 * 异常是什么:就是错误的另外一种说法; * 在java中,有一个专门模拟所有异常的类,所有的异常都必须继承这个类:Throwable; * 本质是:当程序出错以后,jvm ...

  8. 23. Angular 中用 a 标签 href 路由时在浏览器中显示异常 "%2F" 路由失败问题1

    这个是angular1.6默认给hash路由上添加了!(感叹号),导致出错,修改方法如下(添加配置,去掉默认前缀感叹号):   angular.module('routingDemoApp',['ng ...

  9. 22. Angular 中用 a 标签 href 路由时在浏览器中显示异常 "%2F" 路由失败问题

    转自:https://blog.csdn.net/duansale/article/details/77455355 <a href="#/index">index&l ...

随机推荐

  1. 解决resteasy上传表单文件名乱码

    Dubbo在2.6版本后合并了dubbox的resteasy代码后,可以支持rest风格的接口发布,但是在使用form表单上传文件的时候,获取的文件名称是乱码. 下面通过对源码分析一下原因,并提供一种 ...

  2. 关于死循环while(true){}或for(;;){}的总结

    关于死循环while(true){}或for(;;){}的总结 1.基本用法: while(true){     语句体; } for(;;){     语句体; } 以上情况,语句体会一直执行. 2 ...

  3. 使用jQuery发送ajax

    我们先看一下js的原生ajax 直接进入代码,我们先准备好servlet,之后不会改动,所以先看一下. package cn.curry.servlet; import com.alibaba.fas ...

  4. Linux基础环境_安装配置教程(CentOS7.2 64、JDK1.8、Tomcat8)

    Linux基础环境_安装配置教程 (CentOS7.2 64.JDK1.8.Tomcat8) 安装包版本 1)     VMawre-workstation版本包 地址: https://my.vmw ...

  5. uva 10328 - Coin Toss 投硬币(dp递推,大数)

    题意:抛出n次硬币(有顺序),求至少k个以上的连续正面的情况的种数. 思路:转换成求抛n个硬币,至多k-1个连续的情况种数,用所有可能出现的情况种数减去至多k-1个的情况,就得到答案了.此题涉及大数加 ...

  6. 前端面试题总结(二)CSS篇

    前端面试题总结(二)CSS篇 一.link和@import的区别? link属于HTML标签,可以引入出css以外的事务,如RSS,而@import是css提供的,只能加载css文件. link会在页 ...

  7. cookie和session是否可以保存对象

    session看了一下,是可以保存对象的.语法很普通,但是cookie的话本身是只能保存string类型的信息的,这就需要先序列化,然后接收的页面反序列化后形成对象调用,为了防止乱码,需要在数据传输的 ...

  8. codeforce Gym 100570B ShortestPath Query (最短路SPFA)

    题意:询问单源最短路径,每条边有一个颜色,要求路径上相邻边的颜色不能相同,无重边且边权为正. 题解:因为路径的合法性和边的颜色有关, 所以在做spfa的时候,把边丢到队列中去,松弛的时候注意判断一下颜 ...

  9. UVA 12905 Volume of Revolution (几何,微积分)

    题意:分段用椎台面积近似计算体积,然后计算出近似值和真实值的相对误差 微积分加数学. 平头椎台的体积计算公式: V = 1/3*h*(S1+S2*sqrt(S1*S2) 一个更快的计算多项式值的方法: ...

  10. nginx的工作流程

    nginx请求处理流程 nginx进程结构 master进程:是作为worker进程管理的 worker进程:处理真正的请求的而master进程则是管控这些进程的工作方式的:缓存是在多个worker进 ...