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

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. 零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写

    #define 无参数的宏定义的一般形式为:#define 标识符 字符序列 如:#define TRUE 1 注意事项: 1.之作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到 ...

  2. js屏蔽鼠标右键事件

    <script type="text/javascript">function stops(){ return false;}document.oncontextmen ...

  3. github入门之更改提交操作--6

    1.回溯历史版本 1.1.回溯到创建feature-A分支前 1.1.1.要让仓库的HEAD.暂存区.当前工作树回溯到指定状态,需要用到提供目标时间点的哈希值 1.1.2.回溯至未创建feature- ...

  4. redis 知识归档

    中文版redis命令 http://www.redis.net.cn/order/    redis例子 https://github.com/ServiceStack/ServiceStack.Ex ...

  5. 使用工具Source Monitor测量您Java代码的环复杂度

    代码的环复杂度(Cyclomatic complexity,有时也翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出. 来看看计算公式. 代码环 ...

  6. HDU 5092 Seam Carving (dp)

    题意,给一个数字矩阵,要求从上往下的一条路径,使这条路径上数字之和最小,如有多条输出最靠右的一条. 数字三角形打印路径... 一般打印路径有两种选择,一是转移的时候加以记录,二是通过检查dp值回溯. ...

  7. sqlite 新建实体时出错

    解决方式 手动下载 问题原因

  8. Nuget使用备忘

    菜单:工具-库程序包管理器-管理解决方案的NuGet程序包,搜索,下载,安装 或者 工具-库程序包管理器-程序包管理器控制台,输入PM命令,如: install-package log4net 如果不 ...

  9. HTML5<article>元素

    HTML5<article>元素用来定义页面文档的独立内容. 实例: <article class="pageArticle"> <h2>art ...

  10. 括号匹配性检测C语言实现

    #include <stdio.h> #define SIMPLE_KUOHAO "(()1231qeqw)(@#$)" #define COMPLEX_KUOHAO ...