@@ -6822,13 +6822,40 @@ def get_browser_downloads_folder(self):
68226822 return download_helper.get_downloads_folder()
68236823 return os.path.join(os.path.expanduser("~"), "downloads")
68246824
6825+ def get_downloaded_files(self, regex=None, browser=False):
6826+ """Returns a list of files in the [Downloads Folder].
6827+ Depending on settings, that dir may have other files.
6828+ If regex is provided, uses that to filter results."""
6829+ df = self.get_downloads_folder()
6830+ if browser:
6831+ df = self.get_browser_downloads_folder()
6832+ if not os.path.exists(df):
6833+ return []
6834+ elif regex:
6835+ return [fn for fn in os.listdir(df) if re.match(regex, fn)]
6836+ else:
6837+ return os.listdir(df)
6838+
68256839 def get_path_of_downloaded_file(self, file, browser=False):
6826- """Returns the OS path of the downloaded file."""
6840+ """Returns the full OS path of the downloaded file."""
6841+ self.__check_scope()
68276842 if browser:
68286843 return os.path.join(self.get_browser_downloads_folder(), file)
68296844 else:
68306845 return os.path.join(self.get_downloads_folder(), file)
68316846
6847+ def get_data_from_downloaded_file(self, file, timeout=None, browser=False):
6848+ """Returns the contents of the downloaded file specified."""
6849+ self.assert_downloaded_file(file, timeout=timeout, browser=browser)
6850+ fpath = self.get_path_of_downloaded_file(file, browser=browser)
6851+ file_io_lock = fasteners.InterProcessLock(
6852+ constants.MultiBrowser.FILE_IO_LOCK
6853+ )
6854+ with file_io_lock:
6855+ with open(fpath, "r") as f:
6856+ data = f.read().strip()
6857+ return data
6858+
68326859 def is_downloaded_file_present(self, file, browser=False):
68336860 """Returns True if the file exists in the pre-set [Downloads Folder].
68346861 For browser click-initiated downloads, SeleniumBase will override
@@ -6840,8 +6867,7 @@ def is_downloaded_file_present(self, file, browser=False):
68406867 file - The filename of the downloaded file.
68416868 browser - If True, uses the path set by click-initiated downloads.
68426869 If False, uses the self.download_file(file_url) path.
6843- Those paths are often the same. (browser-dependent)
6844- (Default: False)."""
6870+ Those paths are usually the same. (browser-dependent)."""
68456871 return os.path.exists(
68466872 self.get_path_of_downloaded_file(file, browser=browser)
68476873 )
@@ -6853,9 +6879,10 @@ def is_downloaded_file_regex_present(self, regex, browser=False):
68536879 regex - The filename regex of the downloaded file.
68546880 browser - If True, uses the path set by click-initiated downloads.
68556881 If False, uses the self.download_file(file_url) path.
6856- Those paths are often the same. (browser-dependent)
6857- (Default: False)."""
6882+ Those paths are usually the same. (browser-dependent)."""
68586883 df = self.get_downloads_folder()
6884+ if browser:
6885+ df = self.get_browser_downloads_folder()
68596886 matches = [fn for fn in os.listdir(df) if re.match(regex, fn)]
68606887 return len(matches) >= 1
68616888
@@ -6870,8 +6897,7 @@ def delete_downloaded_file_if_present(self, file, browser=False):
68706897 file - The filename to be deleted from the [Downloads Folder].
68716898 browser - If True, uses the path set by click-initiated downloads.
68726899 If False, uses the self.download_file(file_url) path.
6873- Those paths are usually the same. (browser-dependent)
6874- (Default: False)."""
6900+ Those paths are usually the same. (browser-dependent)."""
68756901 if self.is_downloaded_file_present(file, browser=browser):
68766902 file_path = self.get_path_of_downloaded_file(file, browser=browser)
68776903 try:
@@ -6891,8 +6917,7 @@ def delete_downloaded_file(self, file, browser=False):
68916917 file - The filename to be deleted from the [Downloads Folder].
68926918 browser - If True, uses the path set by click-initiated downloads.
68936919 If False, uses the self.download_file(file_url) path.
6894- Those paths are usually the same. (browser-dependent)
6895- (Default: False)."""
6920+ Those paths are usually the same. (browser-dependent)."""
68966921 if self.is_downloaded_file_present(file, browser=browser):
68976922 file_path = self.get_path_of_downloaded_file(file, browser=browser)
68986923 try:
@@ -6912,9 +6937,11 @@ def assert_downloaded_file(self, file, timeout=None, browser=False):
69126937 timeout - The time (seconds) to wait for the download to complete.
69136938 browser - If True, uses the path set by click-initiated downloads.
69146939 If False, uses the self.download_file(file_url) path.
6915- Those paths are often the same. (browser-dependent)
6916- (Default: False)."""
6940+ Those paths are usually the same. (browser-dependent)."""
69176941 self.__check_scope()
6942+ df = self.get_downloads_folder()
6943+ if browser:
6944+ df = self.get_browser_downloads_folder()
69186945 if not timeout:
69196946 timeout = settings.LARGE_TIMEOUT
69206947 if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
@@ -6929,7 +6956,7 @@ def assert_downloaded_file(self, file, timeout=None, browser=False):
69296956 self.assertTrue(
69306957 os.path.exists(downloaded_file_path),
69316958 "File [%s] was not found in the downloads folder [%s]!"
6932- % (file, self.get_downloads_folder() ),
6959+ % (file, df ),
69336960 )
69346961 found = True
69356962 break
@@ -6942,7 +6969,7 @@ def assert_downloaded_file(self, file, timeout=None, browser=False):
69426969 message = (
69436970 "File {%s} was not found in the downloads folder {%s} "
69446971 "after %s seconds! (Or the download didn't complete!)"
6945- % (file, self.get_downloads_folder() , timeout)
6972+ % (file, df , timeout)
69466973 )
69476974 page_actions.timeout_exception("NoSuchFileException", message)
69486975 if self.recorder_mode and self.__current_url_is_recordable():
@@ -6969,8 +6996,7 @@ def assert_downloaded_file_regex(self, regex, timeout=None, browser=False):
69696996 timeout - The time (seconds) to wait for the download to complete.
69706997 browser - If True, uses the path set by click-initiated downloads.
69716998 If False, uses the self.download_file(file_url) path.
6972- Those paths are often the same. (browser-dependent)
6973- (Default: False)."""
6999+ Those paths are usually the same. (browser-dependent)."""
69747000 self.__check_scope()
69757001 if not timeout:
69767002 timeout = settings.LARGE_TIMEOUT
@@ -6980,14 +7006,16 @@ def assert_downloaded_file_regex(self, regex, timeout=None, browser=False):
69807006 stop_ms = start_ms + (timeout * 1000.0)
69817007 found = False
69827008 df = self.get_downloads_folder()
7009+ if browser:
7010+ df = self.get_browser_downloads_folder()
69837011 for x in range(int(timeout)):
69847012 shared_utils.check_if_time_limit_exceeded()
69857013 try:
69867014 matches = [fn for fn in os.listdir(df) if re.match(regex, fn)]
69877015 self.assertTrue(
69887016 len(matches) >= 1,
69897017 "Regex [%s] was not found in the downloads folder [%s]!"
6990- % (regex, self.get_downloads_folder() ),
7018+ % (regex, df ),
69917019 )
69927020 found = True
69937021 break
@@ -7000,7 +7028,7 @@ def assert_downloaded_file_regex(self, regex, timeout=None, browser=False):
70007028 message = (
70017029 "Regex {%s} was not found in the downloads folder {%s} "
70027030 "after %s seconds! (Or the download didn't complete!)"
7003- % (regex, self.get_downloads_folder() , timeout)
7031+ % (regex, df , timeout)
70047032 )
70057033 page_actions.timeout_exception("NoSuchFileException", message)
70067034 if self.demo_mode:
@@ -7015,6 +7043,21 @@ def assert_downloaded_file_regex(self, regex, timeout=None, browser=False):
70157043 except Exception:
70167044 pass
70177045
7046+ def assert_data_in_downloaded_file(
7047+ self, data, file, timeout=None, browser=False
7048+ ):
7049+ """Assert that the expected data exists in the downloaded file."""
7050+ self.assert_downloaded_file(file, timeout=timeout, browser=browser)
7051+ expected = data.strip()
7052+ actual = self.get_data_from_downloaded_file(file, browser=browser)
7053+ if expected not in actual:
7054+ message = (
7055+ "Expected data [%s] is not in downloaded file [%s]!"
7056+ % (expected, file)
7057+ )
7058+ raise Exception(message)
7059+ return True
7060+
70187061 def assert_true(self, expr, msg=None):
70197062 """Asserts that the expression is True.
70207063 Will raise an exception if the statement if False."""
0 commit comments