Не может реагировать на исключение в демонтаже
Я пытаюсь добавить что-то в свой метод разрыва, чтобы в случае исключения он делал снимок экрана перед закрытием экземпляра браузера.
Пока у меня есть: -
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
, Я надеялся, что первый элемент должен содержать как минимум имя исключения.
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()