From 609c57e414d9bf4fc8cd7d9fcae78df8bec5869e Mon Sep 17 00:00:00 2001 From: Joao Pereira and Tira Odhner Date: Wed, 1 Mar 2017 16:18:48 -0500 Subject: [PATCH 3/3] Create screenshot with timestamp when tests fail --- web/regression/feature_utils/base_feature_test.py | 32 +++++++++++++++++++---- web/regression/feature_utils/pgadmin_page.py | 4 +-- web/regression/test_utils.py | 2 +- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/web/regression/feature_utils/base_feature_test.py b/web/regression/feature_utils/base_feature_test.py index 2d275a05..f0c0167f 100644 --- a/web/regression/feature_utils/base_feature_test.py +++ b/web/regression/feature_utils/base_feature_test.py @@ -1,3 +1,5 @@ +from datetime import datetime + import config as app_config from pgadmin.utils.route import BaseTestGenerator from regression.feature_utils.pgadmin_page import PgadminPage @@ -6,16 +8,21 @@ import os class BaseFeatureTest(BaseTestGenerator): CURRENT_PATH = os.path.dirname(os.path.realpath(__file__)) + def setUp(self): if app_config.SERVER_MODE: self.skipTest("Currently, config is set to start pgadmin in server mode. " "This test doesn't know username and password so doesn't work in server mode") self.page = PgadminPage(self.driver, app_config) - self.page.wait_for_app() - self.page.wait_for_spinner_to_disappear() - self.page.reset_layout() - self.page.wait_for_spinner_to_disappear() + try: + self.page.wait_for_app() + self.page.wait_for_spinner_to_disappear() + self.page.reset_layout() + self.page.wait_for_spinner_to_disappear() + except: + self._screenshot() + raise def runTest(self): pass @@ -24,6 +31,21 @@ class BaseFeatureTest(BaseTestGenerator): pass def tearDown(self): - self.page.driver.save_screenshot('{0}/../screenshots/{1}.png'.format(self.CURRENT_PATH, self.__class__.__name__)) + python2_failures = hasattr(self, "_resultForDoCleanups") and ( + self._resultForDoCleanups.errors or self._resultForDoCleanups.failures) + python3_failures = hasattr(self, '_outcome') and self.any_step_failed() + + if python2_failures or python3_failures: + self._screenshot() + self.after() + def any_step_failed(self): + for step in self._outcome.errors: + if step[1] is not None: + return True + return False + + def _screenshot(self): + self.page.driver.save_screenshot( + '{0}/../screenshots/{1}-{2}.png'.format(self.CURRENT_PATH, self.__class__.__name__, str(datetime.now()))) diff --git a/web/regression/feature_utils/pgadmin_page.py b/web/regression/feature_utils/pgadmin_page.py index 952b3722..8622690c 100644 --- a/web/regression/feature_utils/pgadmin_page.py +++ b/web/regression/feature_utils/pgadmin_page.py @@ -55,10 +55,10 @@ class PgadminPage: self.find_by_xpath("//*[@id='tree']//*[.='" + tree_item_text + "']/../*[@class='aciTreeButton']").click() def find_by_xpath(self, xpath): - return self.wait_for_element(lambda (driver): driver.find_element_by_xpath(xpath)) + return self.wait_for_element(lambda driver: driver.find_element_by_xpath(xpath)) def find_by_id(self, element_id): - return self.wait_for_element(lambda (driver): driver.find_element_by_id(element_id)) + return self.wait_for_element(lambda driver: driver.find_element_by_id(element_id)) def find_by_partial_link_text(self, link_text): return self._wait_for( diff --git a/web/regression/test_utils.py b/web/regression/test_utils.py index 199934d8..0848905c 100644 --- a/web/regression/test_utils.py +++ b/web/regression/test_utils.py @@ -16,8 +16,8 @@ import sqlite3 from functools import partial import config -import test_setup import regression +from regression import test_setup SERVER_GROUP = test_setup.config_data['server_group'] file_name = os.path.realpath(__file__) -- 2.11.0