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

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. 关于Linux系统启动时出现UVD not responding, Trying to reset the vcpu问题的解决

    本人的老古董笔记本!不知道什么时候显卡烧坏了 每次启动Linux的时候就会出现错误,信息如下: UVD not responding, trying to reset the VCPU! 讲道理,显卡 ...

  2. 初识RatingBar

    RatingBar,SeekBar和ProgressBar的子类 <RatingBar android:id="@+id/ratingBar2" android:layout ...

  3. uvm_mem——寄存器模型(十二)

    看完了寄存器,再来看看存储器: //------------------------------------------------------------------------------ // ...

  4. div高度不能自适应(子级使用float浮动,父级div高度不能自适应)

    1.问题截图: 2.问题描述: 由于地址.公司名长度的不定性,所以每一条地址所在的父级div高度不定,但是需要设置一个最小的高度min-height:48px;但是当内容增加的时候,父级div高度却不 ...

  5. 【Python图像特征的音乐序列生成】关于数据库到底在哪里下载

    毕竟原网站一个是14年前的一个是16年前的…… 1,http://ifdo.ca/~seymour/nottingham/nottingham.html 这个网站可以下载zip包. 2,https:/ ...

  6. Logback文档(1)

    http://b6ec263c.wiz03.com/share/s/2SX2oY0nX4f32CY5ax1bapaL030VCK2svQZU2rRyDR05KMh5

  7. Array - Two Sum

    import java.util.HashMap; import java.util.Map; /** * 分析: * 普通实现-嵌套循环两次,时间O(n2),空间O(1) * 复杂实现-循环一次,时 ...

  8. DaemonSet 典型应用场景【转】

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. DaemonS ...

  9. java HashMap 内存泄漏

    import java.util.HashMap; import java.util.Map; public class HashMapOver { public static void main(S ...

  10. python之道13

    看代码分析结果 func_list = [] for i in range(10): func_list.append(lambda :i) v1 = func_list[0]() v2 = func ...