56 lines
2.0 KiB
Python
Executable File
56 lines
2.0 KiB
Python
Executable File
import os
|
|
import shutil
|
|
import time
|
|
from seleniumbase.config import settings
|
|
from seleniumbase.fixtures import constants
|
|
|
|
# The "downloads_folder" is a folder for saving downloaded files.
|
|
# Works for downloads initiated by Chromium and Firefox WebDriver clicks.
|
|
# Browser type doesn't matter if using self.download_file(file_url)
|
|
# or self.save_file_as(file_url, new_file_name)
|
|
# The "downloads_folder" is cleaned out at the start of each pytest run,
|
|
# but there is an option to save existing files in "archived_files".
|
|
DOWNLOADS_DIR = constants.Files.DOWNLOADS_FOLDER
|
|
ARCHIVE_DIR = constants.Files.ARCHIVED_DOWNLOADS_FOLDER
|
|
|
|
abs_path = os.path.abspath(".")
|
|
downloads_path = os.path.join(abs_path, DOWNLOADS_DIR)
|
|
|
|
|
|
def get_downloads_folder():
|
|
return downloads_path
|
|
|
|
|
|
def reset_downloads_folder():
|
|
"""Clears the downloads folder.
|
|
If settings.ARCHIVE_EXISTING_DOWNLOADS is set to True, archives it."""
|
|
if os.path.exists(downloads_path) and not os.listdir(downloads_path) == []:
|
|
archived_downloads_folder = os.path.join(
|
|
downloads_path, "..", ARCHIVE_DIR
|
|
)
|
|
reset_downloads_folder_assistant(archived_downloads_folder)
|
|
|
|
|
|
def reset_downloads_folder_assistant(archived_downloads_folder):
|
|
if not os.path.exists(archived_downloads_folder):
|
|
try:
|
|
os.makedirs(archived_downloads_folder)
|
|
except Exception:
|
|
pass # Should only be reachable during multi-threaded test runs
|
|
new_archived_downloads_sub_folder = "%s/downloads_%s" % (
|
|
archived_downloads_folder,
|
|
int(time.time()),
|
|
)
|
|
if os.path.exists(downloads_path):
|
|
if not os.listdir(downloads_path) == []:
|
|
try:
|
|
shutil.move(downloads_path, new_archived_downloads_sub_folder)
|
|
os.makedirs(downloads_path)
|
|
except Exception:
|
|
pass
|
|
if not settings.ARCHIVE_EXISTING_DOWNLOADS:
|
|
try:
|
|
shutil.rmtree(new_archived_downloads_sub_folder)
|
|
except OSError:
|
|
pass
|