背景:在selenium出错后都会截图,那截图的时候都是以当天时间存入到当前时间文件夹中,那这个就可以分成3部,进行封装
一:格式化数据
#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 currentHouse(): timeStr = datetime.now() # 构造当前时间字符串 now = timeStr.strftime('%H') return now def currentTime(): timeStr = datetime.now() # 构造当前时间字符串 now = timeStr.strftime('%H-%M-%S') return now if __name__ == "__main__": print (currentDate()) print (currentTime()) print(currentHouse())
二:使用日期和时间生成文件
from senior.filescreent.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()
会在项目中生成目录文件,以年月日为第一层目录,在以小时为第二层目录
三、 selenium的错误后开始截图
#encoding=utf-8 from selenium import webdriver import unittest, time, os,sys from senior.filescreent.FileUtil import createDir import traceback from senior.filescreent.DateUtil import currentTime # 创建存放异常截图的目录,并得到本次实例中存放图片目录的绝对路径, # 并且作为全局变量,以供本次所有测试用例调用 picDir = createDir() def takeScreenshot(driver, savePath, picName): # 封装截屏方法 # 构造屏幕截图路径及图片名 picPath = os.path.join(savePath, picName+".png") try: # 调用WebDriver提供的get_screenshot_as_file()方法, # 将截取的屏幕图片保存为本地文件 driver.get_screenshot_as_file(picPath) except Exception as e: # 打印异常堆栈信息 print (traceback.print_exc()) class TestFailCaptureScreen(unittest.TestCase): def setUp(self): # 启动浏览器 self.driver = webdriver.Chrome(executable_path="D:\driver\chromedriver") def testSearch(self): url = "http://www.baidu.com" # 访问首页 self.driver.get(url) time.sleep(3) try: self.driver.find_element_by_id("kw"). send_keys(u"selenium测试") self.driver.find_element_by_id("su").click() time.sleep(3) # 断言页面的代码中是否存在“事在人为”这4个关键字, # 因为页面中没有这4个字,所以会触发except语句的执行,并触发截图操作 self.assertTrue(u"事在人为1" in self.driver.page_source, "“事在人为”关键字串在页面源代码中未找到") except AssertionError as e: print (traceback.print_exc()) # 调用封装好的截图方法,进行截图并保存在本地磁盘 # sys._getframe().f_code.co_name 获取当前运行的方法 takeScreenshot(self.driver, picDir, currentTime()+sys._getframe().f_code.co_name) except Exception as e: print (traceback.print_exc()) takeScreenshot(self.driver, picDir, currentTime()+sys._getframe().f_code.co_name) def tearDown(self): # 退出浏览器 self.driver.quit() if __name__ == '__main__': unittest.main()
以时分秒+运行方法名生成了图片内容