1

我正在尝试在我的拆卸方法中添加一些内容,以便在发生异常时在关闭浏览器实例之前截取屏幕截图。

到目前为止,我有: -

def tearDown(self):
    if sys.exc_info()[0]:
        test_method_name = self._testMethodName
        screenshot_name = common_functions.create_unique_id() + test_method_name + ".png"
        common_functions.take_screenshot(self.driver, screenshot_name)
    self.driver.close()

因为它永远不会截取屏幕截图,如果我将 if 语句更改为if sys.exc_info():then 它总是会截取屏幕截图,无论是否引发异常。

当我查询返回的内容时,sys.exc_info我得到None, None, None. 我希望第一个元素至少应该包含异常名称。

4

1 回答 1

1

来自(我的重点)的文档sys.exc_info()

此函数返回一个包含三个值的元组,这些值提供有关当前正在处理的异常的信息。

这对于您正在寻找的内容来说还不够好,因为当tearDown被调用时,测试期间发生的潜在异常已经被处理,这就是为什么无论在测试期间是否引发异常,sys.exc_info()都会返回一个元组的None, None, None

但是,您可以尝试使用不同的方法:setUp定义一个标志,该标志had_exception将指示测试是否有异常。这看起来像:

class MyTest(unittest.TestCase):
    def setUp(self):
        self.had_exception = True
        # ...

    def test_sample(self):
        self.assertTrue("your test logic here...")
        self.had_exception = False

    def tearDown(self):
        if self.had_exception:
            test_method_name = self._testMethodName
            screenshot_name = common_functions.create_unique_id() + test_method_name + ".png"
            common_functions.take_screenshot(self.driver, screenshot_name)
        self.driver.close()
于 2017-12-19T16:56:19.827 回答