2017-12-19 29 views
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 sys.exc_info():にif文を変更した場合、それは関係なく、常に例外が発生しているかどうかのスクリーンショットを取ると。

sys.exc_infoが返すものをクエリすると、None, None, Noneが返されます。最初の要素には少なくとも例外名を含めることを望んでいました。 sys.exc_info()docs(私の強調)から

+0

「tearDown」はどのように呼び出されますか? – asherbar

+0

セットアップと実際のテストケースの機能に加えて、テストケースのクラス内にあります。テストケースの実行時に、SetupとTeardownの両方が正常に動作します(存在しない要素を探すことによって例外を強制しています)。例外が発生したときにスクリーンショットを取得できません。 if文に依存して、常に発生するか、まったく発生しません。 – Northers

答えて

1

この関数は、が現在を処理中の例外を3つの値のタプルを返します。

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() 
+0

それは素晴らしいです - ありがとう。これは完璧に動作し、なぜ、私がNone、None、Noneの結果を得ているのかについての素晴らしい説明です。 :) – Northers

関連する問題