在使用 unittest 写用例的时候,想要实现:在用例执行的过程中,出现任何错误或失败,就进行截图……代码如下:
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from parameterized import parameterized
import unittest,time
class BaiduTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(3)
self.base_url = "https://www.baidu.com"
#自己写的截图装饰器
def screenshot_error(func):
def _screenshot_error(self,*args,**kwargs):
try:
func(self,*args,**kwargs)
except Exception as e:
self.driver.get_screenshot_as_file("error.png")
raise e
return _screenshot_error
@screenshot_error
#@parameterized.expand([(u"自动化测试")])
def test_baidu(self,key="python"):
u'''baidu搜索测试'''
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_id('kw').send_keys(key,Keys.ENTER)
time.sleep(1)
title = driver.title
self.assertEqual(key,title) #错误的断言,验证截图功能
def tearDown(self):
self.driver.close()
if __name__=="__main__":
unittest.main()
运行通过,截图保存成功……
于是再添加 @parameterized.expand([(u"自动化测试")])装饰器,现在运行就有问题了,用例会运行 2 次,第一次是一个空用例,截下一张空白图片,第二次不会截图……出错信息:
Traceback (most recent call last):
File "/home/bhyuan/selenuim-python/test_baidu.py", line 49, in _screenshot_error
raise e
File "/home/bhyuan/selenuim-python/test_baidu.py", line 45, in _screenshot_error
func(self,*args,**kwargs)
TypeError: 'NoneType' object is not callable
本人初学者,感觉问题应该在此处
def _screenshot_error(self,*args,**kwargs):
不知如何修改?
其实两个装饰器后,装饰器内部运行逻辑,我是十分懵逼啊,希望有共同需求的童鞋一起探讨,期待大神指点~~~
备注:parameterized 是通过 $ pip install parameterized 安装的