From bc3baa0815d0c1f69722563c0aca8a6fc2be0e7c Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Sun, 8 May 2016 17:31:25 -0400 Subject: [PATCH] Add method for saving test failure data from a browser --- seleniumbase/fixtures/page_actions.py | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/seleniumbase/fixtures/page_actions.py b/seleniumbase/fixtures/page_actions.py index 29e1d94a..80caf504 100755 --- a/seleniumbase/fixtures/page_actions.py +++ b/seleniumbase/fixtures/page_actions.py @@ -19,8 +19,11 @@ By.TAG_NAME By.PARTIAL_LINK_TEXT """ +import codecs import os +import sys import time +import traceback from seleniumbase.config import settings from selenium.webdriver.common.by import By from selenium.webdriver.remote.errorhandler import ElementNotVisibleException @@ -293,6 +296,42 @@ def save_screenshot(driver, name, folder=None): driver.get_screenshot_as_file(screenshot_file) +def _get_last_page(driver): + try: + last_page = driver.current_url + except Exception: + last_page = '[WARNING! Browser Not Open!]' + if len(last_page) < 5: + last_page = '[WARNING! Browser Not Open!]' + return last_page + + +def save_test_failure_data(driver, name, browser_type, folder=None): + """ + Saves failure data to the current directory (or to a subfolder if provided) + If the folder provided doesn't exist, it will get created. + """ + if folder: + abs_path = os.path.abspath('.') + file_path = abs_path + "/%s" % folder + if not os.path.exists(file_path): + os.makedirs(file_path) + failure_data_file_path = "%s/%s" % (file_path, name) + else: + failure_data_file_path = name + failure_data_file = codecs.open(failure_data_file_path, "w+", "utf-8") + last_page = _get_last_page(driver) + data_to_save = [] + data_to_save.append("Last_Page: %s" % last_page) + data_to_save.append("Browser: %s " % browser_type) + data_to_save.append("Traceback: " + ''.join( + traceback.format_exception(sys.exc_info()[0], + sys.exc_info()[1], + sys.exc_info()[2]))) + failure_data_file.writelines("\r\n".join(data_to_save)) + failure_data_file.close() + + def wait_for_ready_state_complete(driver, timeout=settings.EXTREME_TIMEOUT): """ The DOM (Document Object Model) has a property called "readyState".