python 封装selenium 出错后,以时间生成文件夹保存错误图片

背景:在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()

   

以时分秒+运行方法名生成了图片内容

原文地址:https://www.cnblogs.com/chongyou/p/12639071.html