无法对拆解中的异常做出反应

Cannot react to exception in teardown

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

到目前为止我有:-

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(): 那么无论是否引发异常,它都会始终截取屏幕截图。

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

来自sys.exc_info()上的docs(我的重点):

This function returns a tuple of three values that give information about the exception that is currently being handled.

这对于您正在寻找的内容来说还不够好,因为在调用 tearDown 时,已经处理了测试期间发生的潜在异常,这就是为什么无论是否有异常在测试期间被提出,sys.exc_info() 将 return 一个 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()