Selenium2+python自动化66-装饰器之运行失败截图

Posted jason89

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium2+python自动化66-装饰器之运行失败截图相关的知识,希望对你有一定的参考价值。

前言

对于用例失败截图,很多小伙伴都希望在用例执行失败的时候能自动截图,想法是很好的,实现起来并不是那么容易。

这里分享下我的一些思路,当然目前还没找到完美的解决方案,我的思路是用装饰器去解决,希望有高手已经实现的可以指点下。

 

一、函数作为形参

1.函数的参数也可以是另外一个函数,也就是说传的参数不仅可以是常见的字符串、数字等,也可以是一个函数

2.定义aaa为一个加法函数,bbb为减法函数

3.calculate这个函数传三个参数,第一个参数是一个函数,另外两个参数是函数的两个参数

技术分享图片

 

二、万能装饰器

1.由于不知道我们被调用的函数到底有几个参数,这时候就可以写一个万能的装饰器,传可变参数

2.这个装饰器实现一个简单功能:运行一个函数,运行不抛异常,就打印pass;运行函数抛异常就打印fail

技术分享图片

 

三、实现百度搜索功能

# coding:utf-8
from selenium import webdriver

driver = webdriver.Firefox()

# 截图功能
def get_screen():
    ‘‘‘截图‘‘‘
    import time
    nowTime = time.strftime("%Y_%m_%d_%H_%M_%S")
    driver.get_screenshot_as_file(%s.jpg % nowTime)

# 自动截图装饰器
def screen(func):
    ‘‘‘截图装饰器‘‘‘
    def inner(*args, **kwargs):
        try:
            f = func(*args, **kwargs)
            return f
        except:
            get_screen()  # 失败后截图
    return inner


@screen
def search(driver):
    driver.get("https://www.baidu.com")
    driver.find_element_by_id("kw11").send_keys("python")  # 此行运行失败的
    driver.find_element_by_id("su").click()

search(driver)  # 执行search

这个只是我实现的一个简单的功能,至于如何运用到测试用例中与unittest结合起来,实现的最大难点在于driver参数的处理,因为截图需要用到driver参数。

以上是关于Selenium2+python自动化66-装饰器之运行失败截图的主要内容,如果未能解决你的问题,请参考以下文章

Selenium2+python自动化55-unittest之装饰器(@classmethod)转载

Selenium2+python自动化55-unittest之装饰器(@classmethod)转载

Selenium2+python自动化67-用例失败自动截图

Selenium2+python自动化67-用例失败自动截图转载

Selenium2+python-unittest之装饰器(@classmethod)

Selenium2+python自动化70-unittest之跳过用例(skip)转载