From b560d64ca74cfda667255d80f48fa4a5ec1f7d0c Mon Sep 17 00:00:00 2001 From: SandeshNarayan Date: Thu, 6 Feb 2025 19:28:59 +0530 Subject: [PATCH 1/5] Resolved issue #106: Moved file functionality to file.py --- linkedin.py | 12 +++++++----- tests/base_test_class.py | 28 +++++++++++++--------------- utils/file.py | 24 ++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/linkedin.py b/linkedin.py index 7186034..0fbcd6d 100755 --- a/linkedin.py +++ b/linkedin.py @@ -9,6 +9,7 @@ from selenium.webdriver.support.ui import WebDriverWait from webdriver_manager.chrome import ChromeDriverManager + import config import constants import models @@ -107,11 +108,12 @@ def startApplying(self): " jobs out of " + str(jobCounter.total) + ".", MessageTypes.SUCCESS) except Exception as e: - logger.logDebugMessage("Unhandled exception in startApplying", MessageTypes.ERROR, e, True) - # TODO move this functionality to file.py - self.driver.save_screenshot("unhandled_exception.png") - with open("page_source_at_unhandled_exception.html", "w") as file: - file.write(self.driver.page_source) + logger.logDebugMessage("Unhandled exception in StartApplying", logger.MessageTypes.ERROR, e, True) + + resultFileWriter.capture_screenshot("unhandeled_exception.png") + + resultFileWriter.capture_html(self.driver, "page_source_as_unhandled_exception.html") + def goToJobsSearchPage(self): diff --git a/tests/base_test_class.py b/tests/base_test_class.py index 85f58c6..88ddd7e 100644 --- a/tests/base_test_class.py +++ b/tests/base_test_class.py @@ -1,7 +1,9 @@ import unittest from selenium import webdriver from selenium.common.exceptions import WebDriverException -import os + +import utils.file as resultFileWriter + class BaseTestCase(unittest.TestCase): @@ -16,35 +18,31 @@ def tearDown(self, driver: webdriver.Chrome): super().tearDown() # driver.quit() - # TODO Move this to file.py + def capture_test_failure_info(self, driver: webdriver.Chrome): """Capture screenshots and HTML content for debugging.""" try: - if not os.path.exists('data'): - os.makedirs('data') - - if not os.path.exists('data/tests'): - os.makedirs('data/tests') + resultFileWriter.create_directory('data') + resultFileWriter.create_directory('data/tests') + id = self.id() class_name = id.split('.')[0] method_name = id.split('.')[-1] - test_directory = os.path.join('data/tests', class_name, method_name) + test_directory = resultFileWriter.join_paths('data/tests', class_name, method_name) - if not os.path.exists(test_directory): - os.makedirs(test_directory) + resultFileWriter.create_directory(test_directory) - screenshot_path = os.path.join(test_directory, "screenshot.png") - html_path = os.path.join(test_directory, "page.html") + screenshot_path = resultFileWriter.join_paths(test_directory, "screenshot.png") + html_path = resultFileWriter.join_paths(test_directory, "page.html") # Capture screenshot - driver.save_screenshot(screenshot_path) + resultFileWriter.capture_screenshot(driver, screenshot_path) # Capture HTML content - with open(html_path, 'w', encoding='utf-8') as f: - f.write(driver.page_source) + resultFileWriter.capture_html(driver, html_path) except WebDriverException as e: print(f"Failed to capture screenshot or HTML: {e}") diff --git a/utils/file.py b/utils/file.py index af44949..cda3163 100644 --- a/utils/file.py +++ b/utils/file.py @@ -1,5 +1,6 @@ import time import os +import logging import utils.logger as logger from utils.logger import MessageTypes @@ -44,6 +45,29 @@ def __writeResultsIntoFile(text: str): logger.logDebugMessage("Error in writeResults", logger.MessageTypes.ERROR, e) +def create_directory(path : str): + if not os.path.exists(path): + os.makedirs(path) + + +def capture_screenshot(driver, screenshot_path): + try: + driver.save_screenshot(screenshot_path) + except Exception as e: + logging.error(f"Failed to capture screenshot: {e}") + + +def capture_html(driver, html_path): + try: + with open(html_path, 'w', encoding='utf-8') as f: + f.write(driver.page_source) + except Exception as e: + logging.error(f"Failed to capture HTML: {e}") + + +def join_paths(*paths): + return os.path.join(*paths) + # def __writeResults(text: str): # timeStr = time.strftime("%Y%m%d") # fileName = "Applied Jobs DATA - " +timeStr + ".txt" From 9e41f237e5685f6c10f164684f9073af55d0922f Mon Sep 17 00:00:00 2001 From: SandeshNarayan Date: Fri, 7 Feb 2025 03:44:39 +0530 Subject: [PATCH 2/5] Issue #106: Moved file functionality to file.py --- linkedin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkedin.py b/linkedin.py index 0fbcd6d..a390bcb 100755 --- a/linkedin.py +++ b/linkedin.py @@ -108,7 +108,7 @@ def startApplying(self): " jobs out of " + str(jobCounter.total) + ".", MessageTypes.SUCCESS) except Exception as e: - logger.logDebugMessage("Unhandled exception in StartApplying", logger.MessageTypes.ERROR, e, True) + logger.logDebugMessage("Unhandled exception in StartApplying", MessageTypes.ERROR, e, True) resultFileWriter.capture_screenshot("unhandeled_exception.png") From 5f1d5ae8565e29cd4635ecd4eab4bce950939a50 Mon Sep 17 00:00:00 2001 From: SandeshNarayan Date: Sat, 8 Feb 2025 19:05:01 +0530 Subject: [PATCH 3/5] Fixed issues as review --- linkedin.py | 4 ++-- tests/base_test_class.py | 20 ++++++++++---------- utils/file.py | 9 +++++---- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/linkedin.py b/linkedin.py index 9d68857..112a16e 100755 --- a/linkedin.py +++ b/linkedin.py @@ -110,9 +110,9 @@ def startApplying(self): except Exception as e: logger.logDebugMessage("Unhandled exception in StartApplying", MessageTypes.ERROR, e, True) - resultFileWriter.capture_screenshot("unhandeled_exception.png") + resultFileWriter.captureScreenshot(self.driver, "unhandeled_exception.png") - resultFileWriter.capture_html(self.driver, "page_source_as_unhandled_exception.html") + resultFileWriter.captureHtml(self.driver, "page_source_at_unhandled_exception.html") diff --git a/tests/base_test_class.py b/tests/base_test_class.py index 88ddd7e..de34265 100644 --- a/tests/base_test_class.py +++ b/tests/base_test_class.py @@ -23,26 +23,26 @@ def capture_test_failure_info(self, driver: webdriver.Chrome): """Capture screenshots and HTML content for debugging.""" try: - resultFileWriter.create_directory('data') - resultFileWriter.create_directory('data/tests') + resultFileWriter.createDirectory('data') + resultFileWriter.createDirectory('data/tests') id = self.id() - class_name = id.split('.')[0] - method_name = id.split('.')[-1] + className = id.split('.')[0] + methodName = id.split('.')[-1] - test_directory = resultFileWriter.join_paths('data/tests', class_name, method_name) + testDirectory = resultFileWriter.joinPaths('data/tests', className, methodName) - resultFileWriter.create_directory(test_directory) + resultFileWriter.createDirectory(testDirectory) - screenshot_path = resultFileWriter.join_paths(test_directory, "screenshot.png") - html_path = resultFileWriter.join_paths(test_directory, "page.html") + screenshotPath = resultFileWriter.joinPaths(testDirectory, "screenshot.png") + htmlPath = resultFileWriter.joinPaths(testDirectory, "page.html") # Capture screenshot - resultFileWriter.capture_screenshot(driver, screenshot_path) + resultFileWriter.captureScreenshot(driver, screenshotPath) # Capture HTML content - resultFileWriter.capture_html(driver, html_path) + resultFileWriter.captureHtml(driver, htmlPath) except WebDriverException as e: print(f"Failed to capture screenshot or HTML: {e}") diff --git a/utils/file.py b/utils/file.py index cda3163..22a5c10 100644 --- a/utils/file.py +++ b/utils/file.py @@ -4,6 +4,7 @@ import utils.logger as logger from utils.logger import MessageTypes +from selenium.webdriver.remote.webdriver import WebDriver def displayWriteResults(lineToWrite: str): @@ -45,19 +46,19 @@ def __writeResultsIntoFile(text: str): logger.logDebugMessage("Error in writeResults", logger.MessageTypes.ERROR, e) -def create_directory(path : str): +def createDirectory(path : str): if not os.path.exists(path): os.makedirs(path) -def capture_screenshot(driver, screenshot_path): +def captureScreenshot(driver : WebDriver, screenshot_path : str): try: driver.save_screenshot(screenshot_path) except Exception as e: logging.error(f"Failed to capture screenshot: {e}") -def capture_html(driver, html_path): +def captureHtml(driver : WebDriver, html_path : str): try: with open(html_path, 'w', encoding='utf-8') as f: f.write(driver.page_source) @@ -65,7 +66,7 @@ def capture_html(driver, html_path): logging.error(f"Failed to capture HTML: {e}") -def join_paths(*paths): +def joinPaths(*paths : str): return os.path.join(*paths) # def __writeResults(text: str): From e7814fd37b18597632fea3c4305eeae50ccc7949 Mon Sep 17 00:00:00 2001 From: SandeshNarayan Date: Sun, 9 Feb 2025 19:28:42 +0530 Subject: [PATCH 4/5] Fixed inconsistent spacing to enhance readability --- linkedin.py | 7 ++----- tests/base_test_class.py | 12 ++++-------- utils/file.py | 11 ++++++----- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/linkedin.py b/linkedin.py index 112a16e..93951a3 100755 --- a/linkedin.py +++ b/linkedin.py @@ -108,12 +108,9 @@ def startApplying(self): " jobs out of " + str(jobCounter.total) + ".", MessageTypes.SUCCESS) except Exception as e: - logger.logDebugMessage("Unhandled exception in StartApplying", MessageTypes.ERROR, e, True) - + logger.logDebugMessage("Unhandled exception in StartApplying", MessageTypes.ERROR, e, True) resultFileWriter.captureScreenshot(self.driver, "unhandeled_exception.png") - - resultFileWriter.captureHtml(self.driver, "page_source_at_unhandled_exception.html") - + resultFileWriter.captureHtml(self.driver, "page_source_at_unhandled_exception.html") def goToJobsSearchPage(self): diff --git a/tests/base_test_class.py b/tests/base_test_class.py index de34265..bbef924 100644 --- a/tests/base_test_class.py +++ b/tests/base_test_class.py @@ -8,8 +8,7 @@ class BaseTestCase(unittest.TestCase): def tearDown(self, driver: webdriver.Chrome): - """Capture screenshot and HTML content if the test fails.""" - + #Capture screenshot and HTML content if the test fails test_exceptions = self._outcome.result.errors test_failures = self._outcome.result.failures if any(error for (_, error) in test_exceptions) or test_failures: @@ -20,19 +19,16 @@ def tearDown(self, driver: webdriver.Chrome): def capture_test_failure_info(self, driver: webdriver.Chrome): - """Capture screenshots and HTML content for debugging.""" - + #Capture screenshots and HTML content for debugging try: resultFileWriter.createDirectory('data') resultFileWriter.createDirectory('data/tests') - - + id = self.id() className = id.split('.')[0] methodName = id.split('.')[-1] - testDirectory = resultFileWriter.joinPaths('data/tests', className, methodName) - + testDirectory = resultFileWriter.joinPaths('data/tests', className, methodName) resultFileWriter.createDirectory(testDirectory) screenshotPath = resultFileWriter.joinPaths(testDirectory, "screenshot.png") diff --git a/utils/file.py b/utils/file.py index 22a5c10..09aa261 100644 --- a/utils/file.py +++ b/utils/file.py @@ -4,7 +4,7 @@ import utils.logger as logger from utils.logger import MessageTypes -from selenium.webdriver.remote.webdriver import WebDriver +from selenium import webdriver def displayWriteResults(lineToWrite: str): @@ -46,19 +46,19 @@ def __writeResultsIntoFile(text: str): logger.logDebugMessage("Error in writeResults", logger.MessageTypes.ERROR, e) -def createDirectory(path : str): +def createDirectory(path: str): if not os.path.exists(path): os.makedirs(path) -def captureScreenshot(driver : WebDriver, screenshot_path : str): +def captureScreenshot(driver: webdriver, screenshot_path: str): try: driver.save_screenshot(screenshot_path) except Exception as e: logging.error(f"Failed to capture screenshot: {e}") -def captureHtml(driver : WebDriver, html_path : str): +def captureHtml(driver: webdriver, html_path: str): try: with open(html_path, 'w', encoding='utf-8') as f: f.write(driver.page_source) @@ -66,9 +66,10 @@ def captureHtml(driver : WebDriver, html_path : str): logging.error(f"Failed to capture HTML: {e}") -def joinPaths(*paths : str): +def joinPaths(*paths: str): return os.path.join(*paths) + # def __writeResults(text: str): # timeStr = time.strftime("%Y%m%d") # fileName = "Applied Jobs DATA - " +timeStr + ".txt" From 949cefa4f73e0991d0204dae2464530b6e7487ad Mon Sep 17 00:00:00 2001 From: SandeshNarayan Date: Sun, 9 Feb 2025 19:55:39 +0530 Subject: [PATCH 5/5] fixed webdriver import issue in file.py --- tests/base_test_class.py | 3 +-- utils/file.py | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/base_test_class.py b/tests/base_test_class.py index bbef924..e76331a 100644 --- a/tests/base_test_class.py +++ b/tests/base_test_class.py @@ -1,8 +1,7 @@ import unittest from selenium import webdriver from selenium.common.exceptions import WebDriverException - -import utils.file as resultFileWriter +import utils.file as resultFileWriter class BaseTestCase(unittest.TestCase): diff --git a/utils/file.py b/utils/file.py index 09aa261..bb3a968 100644 --- a/utils/file.py +++ b/utils/file.py @@ -51,16 +51,16 @@ def createDirectory(path: str): os.makedirs(path) -def captureScreenshot(driver: webdriver, screenshot_path: str): +def captureScreenshot(driver: webdriver.Chrome, screenshotPath: str): try: - driver.save_screenshot(screenshot_path) + driver.save_screenshot(screenshotPath) except Exception as e: logging.error(f"Failed to capture screenshot: {e}") -def captureHtml(driver: webdriver, html_path: str): +def captureHtml(driver: webdriver.Chrome, htmlPath: str): try: - with open(html_path, 'w', encoding='utf-8') as f: + with open(htmlPath, 'w', encoding='utf-8') as f: f.write(driver.page_source) except Exception as e: logging.error(f"Failed to capture HTML: {e}")