嘿,有一种方法可以捕获异常时的截图,任何异常.我的’失败’解决方案放在BaseTestCase,unittest.TestCase子类中:
class BaseTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""some code"""
@property
def failureException(self):
class MyFailureException(Exception):
def __init__(self_, *args, **kwargs):
screenshot_dir = '../error_log'
self.driver.save_screenshot('{0}/{1}.jpeg'.format(screenshot_dir, self.id()))
return super().__init__(*args, **kwargs)
MyFailureException.__name__ = Exception.__name__
return MyFailureException
最初它是AssertionError而不是Exception但它只会捕获断言错误而我对其他类型的错误更感兴趣
解决方法:
要在发生错误或故障时截取屏幕截图,请检查tearDown方法中当前是否正在处理异常:
import unittest, sys, exceptions
from selenium import webdriver
class TestCaseBase(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def tearDown(self):
type, value, traceback = sys.exc_info()
if type is exceptions.AssertionError :
self.driver.save_screenshot(r'screenshot-failure.png')
elif type is exceptions.Exception :
self.driver.save_screenshot(r'screenshot-error.png')
self.driver.quit()
class MyTestCase(TestCaseBase):
def test_should_take_screenshot_on_failure(self):
self.driver.get("https://stackoverflow.com/")
self.assertTrue(False)
def test_should_take_screenshot_on_error(self):
self.driver.get("https://stackoverflow.com/")
raise Exception("my exception")
if __name__ == '__main__':
unittest.main()
您还可以覆盖方法TestResult.addError和TestResult.addFailure:
import unittest
from selenium import webdriver
class TestCaseBase(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def tearDown(self):
self.driver.quit()
def run(self, result=None):
super(TestCaseBase, self).run(TestResultEx(result, self))
class MyTestCase(TestCaseBase):
def test_should_take_screenshot_on_failure(self):
self.driver.get("https://stackoverflow.com/")
self.assertTrue(False)
def test_should_take_screenshot_on_error(self):
self.driver.get("https://stackoverflow.com/")
raise Exception("my exception")
class TestResultEx(object):
def __init__(self, result, testcase):
self.result = result
self.testcase = testcase
def __getattr__(self, name):
return object.__getattribute__(self.result, name)
def addError(self, test, err):
self.result.addError(test, err)
self.testcase.driver.save_screenshot(r'screenshot-error.png')
def addFailure(self, test, err):
self.result.addFailure(test, err)
self.testcase.driver.save_screenshot(r'screenshot-failure.png')
if __name__ == '__main__':
unittest.main()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。