@@ -6822,13 +6822,40 @@ def get_browser_downloads_folder(self):
6822
6822
return download_helper.get_downloads_folder()
6823
6823
return os.path.join(os.path.expanduser("~"), "downloads")
6824
6824
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
+
6825
6839
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()
6827
6842
if browser:
6828
6843
return os.path.join(self.get_browser_downloads_folder(), file)
6829
6844
else:
6830
6845
return os.path.join(self.get_downloads_folder(), file)
6831
6846
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
+
6832
6859
def is_downloaded_file_present(self, file, browser=False):
6833
6860
"""Returns True if the file exists in the pre-set [Downloads Folder].
6834
6861
For browser click-initiated downloads, SeleniumBase will override
@@ -6840,8 +6867,7 @@ def is_downloaded_file_present(self, file, browser=False):
6840
6867
file - The filename of the downloaded file.
6841
6868
browser - If True, uses the path set by click-initiated downloads.
6842
6869
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)."""
6845
6871
return os.path.exists(
6846
6872
self.get_path_of_downloaded_file(file, browser=browser)
6847
6873
)
@@ -6853,9 +6879,10 @@ def is_downloaded_file_regex_present(self, regex, browser=False):
6853
6879
regex - The filename regex of the downloaded file.
6854
6880
browser - If True, uses the path set by click-initiated downloads.
6855
6881
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)."""
6858
6883
df = self.get_downloads_folder()
6884
+ if browser:
6885
+ df = self.get_browser_downloads_folder()
6859
6886
matches = [fn for fn in os.listdir(df) if re.match(regex, fn)]
6860
6887
return len(matches) >= 1
6861
6888
@@ -6870,8 +6897,7 @@ def delete_downloaded_file_if_present(self, file, browser=False):
6870
6897
file - The filename to be deleted from the [Downloads Folder].
6871
6898
browser - If True, uses the path set by click-initiated downloads.
6872
6899
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)."""
6875
6901
if self.is_downloaded_file_present(file, browser=browser):
6876
6902
file_path = self.get_path_of_downloaded_file(file, browser=browser)
6877
6903
try:
@@ -6891,8 +6917,7 @@ def delete_downloaded_file(self, file, browser=False):
6891
6917
file - The filename to be deleted from the [Downloads Folder].
6892
6918
browser - If True, uses the path set by click-initiated downloads.
6893
6919
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)."""
6896
6921
if self.is_downloaded_file_present(file, browser=browser):
6897
6922
file_path = self.get_path_of_downloaded_file(file, browser=browser)
6898
6923
try:
@@ -6912,9 +6937,11 @@ def assert_downloaded_file(self, file, timeout=None, browser=False):
6912
6937
timeout - The time (seconds) to wait for the download to complete.
6913
6938
browser - If True, uses the path set by click-initiated downloads.
6914
6939
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)."""
6917
6941
self.__check_scope()
6942
+ df = self.get_downloads_folder()
6943
+ if browser:
6944
+ df = self.get_browser_downloads_folder()
6918
6945
if not timeout:
6919
6946
timeout = settings.LARGE_TIMEOUT
6920
6947
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
@@ -6929,7 +6956,7 @@ def assert_downloaded_file(self, file, timeout=None, browser=False):
6929
6956
self.assertTrue(
6930
6957
os.path.exists(downloaded_file_path),
6931
6958
"File [%s] was not found in the downloads folder [%s]!"
6932
- % (file, self.get_downloads_folder() ),
6959
+ % (file, df ),
6933
6960
)
6934
6961
found = True
6935
6962
break
@@ -6942,7 +6969,7 @@ def assert_downloaded_file(self, file, timeout=None, browser=False):
6942
6969
message = (
6943
6970
"File {%s} was not found in the downloads folder {%s} "
6944
6971
"after %s seconds! (Or the download didn't complete!)"
6945
- % (file, self.get_downloads_folder() , timeout)
6972
+ % (file, df , timeout)
6946
6973
)
6947
6974
page_actions.timeout_exception("NoSuchFileException", message)
6948
6975
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):
6969
6996
timeout - The time (seconds) to wait for the download to complete.
6970
6997
browser - If True, uses the path set by click-initiated downloads.
6971
6998
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)."""
6974
7000
self.__check_scope()
6975
7001
if not timeout:
6976
7002
timeout = settings.LARGE_TIMEOUT
@@ -6980,14 +7006,16 @@ def assert_downloaded_file_regex(self, regex, timeout=None, browser=False):
6980
7006
stop_ms = start_ms + (timeout * 1000.0)
6981
7007
found = False
6982
7008
df = self.get_downloads_folder()
7009
+ if browser:
7010
+ df = self.get_browser_downloads_folder()
6983
7011
for x in range(int(timeout)):
6984
7012
shared_utils.check_if_time_limit_exceeded()
6985
7013
try:
6986
7014
matches = [fn for fn in os.listdir(df) if re.match(regex, fn)]
6987
7015
self.assertTrue(
6988
7016
len(matches) >= 1,
6989
7017
"Regex [%s] was not found in the downloads folder [%s]!"
6990
- % (regex, self.get_downloads_folder() ),
7018
+ % (regex, df ),
6991
7019
)
6992
7020
found = True
6993
7021
break
@@ -7000,7 +7028,7 @@ def assert_downloaded_file_regex(self, regex, timeout=None, browser=False):
7000
7028
message = (
7001
7029
"Regex {%s} was not found in the downloads folder {%s} "
7002
7030
"after %s seconds! (Or the download didn't complete!)"
7003
- % (regex, self.get_downloads_folder() , timeout)
7031
+ % (regex, df , timeout)
7004
7032
)
7005
7033
page_actions.timeout_exception("NoSuchFileException", message)
7006
7034
if self.demo_mode:
@@ -7015,6 +7043,21 @@ def assert_downloaded_file_regex(self, regex, timeout=None, browser=False):
7015
7043
except Exception:
7016
7044
pass
7017
7045
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
+
7018
7061
def assert_true(self, expr, msg=None):
7019
7062
"""Asserts that the expression is True.
7020
7063
Will raise an exception if the statement if False."""
0 commit comments