Firefox configuration in Selenium Python - Build an Automation Script
from selenium import webdriver from selenium.webdriver.firefox.options import Options import os import time def test_firefox_configuration(): # Set custom download directory download_dir = os.path.join(os.getcwd(), "downloads") if not os.path.exists(download_dir): os.makedirs(download_dir) # Create Firefox profile and set preferences profile = webdriver.FirefoxProfile() # Disable notifications profile.set_preference("dom.webnotifications.enabled", False) # Set download directory profile.set_preference("browser.download.folderList", 2) # 2 means use custom location profile.set_preference("browser.download.dir", download_dir) # Disable download prompt for common file types profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf,application/octet-stream") profile.set_preference("pdfjs.disabled", True) # Disable built-in PDF viewer # Initialize Firefox options options = Options() options.profile = profile # Launch Firefox with profile driver = webdriver.Firefox(options=options) try: # Navigate to a test page that triggers download driver.get("https://file-examples.com/index.php/sample-documents-download/sample-pdf-download/") # Click the download button for a sample PDF file download_button = driver.find_element("xpath", "//a[contains(text(),'Download sample pdf file')]" ) download_button.click() # Wait for download to complete (simple wait for demo purposes) time.sleep(5) # Verify file downloaded files = os.listdir(download_dir) assert any(file.endswith(".pdf") for file in files), "PDF file was not downloaded" # Since notifications are disabled, no popup should appear (cannot assert popup absence easily) # We rely on preference set and no exceptions thrown finally: driver.quit() if __name__ == "__main__": test_firefox_configuration()
This script creates a Firefox profile with preferences to disable notifications and set a custom download directory. It disables the notification popups by setting dom.webnotifications.enabled to False. It sets the download folder to a local downloads directory and disables the download prompt for PDF files by setting browser.helperApps.neverAsk.saveToDisk. The built-in PDF viewer is disabled to force download.
The test navigates to a sample PDF download page and clicks the download link. It waits briefly to allow the file to download, then checks the download folder for a PDF file. The test asserts that the file exists, confirming the download worked automatically.
Finally, the browser is closed properly in a finally block to ensure cleanup.
Now add data-driven testing with 3 different file types to download (PDF, CSV, XLS)
Practice
FirefoxOptions() in Selenium tests?Solution
Step 1: Understand the role of FirefoxOptions
FirefoxOptions()is used to set browser preferences like headless mode or disable notifications before launching Firefox.Step 2: Differentiate from other Selenium tasks
Locating elements, assertions, and reports are separate tasks not handled byFirefoxOptions().Final Answer:
To configure Firefox browser settings before starting the test -> Option AQuick Check:
FirefoxOptions() = configure browser [OK]
- Confusing options with element locators
- Thinking options generate reports
- Mixing options with assertions
Solution
Step 1: Recall correct syntax for headless mode
In Selenium Python,options.headless = Trueis the standard way to enable headless mode for Firefox.Step 2: Check other options for correctness
set_headless()andenable_headless()are not valid methods.add_argument('--headless')works for Chrome but not recommended for Firefox.Final Answer:
options = FirefoxOptions() options.headless = True -> Option CQuick Check:
Set options.headless = True for Firefox headless [OK]
- Using Chrome syntax like add_argument('--headless')
- Calling non-existent methods like set_headless()
- Forgetting to create FirefoxOptions instance
from selenium.webdriver import Firefox from selenium.webdriver.firefox.options import Options options = Options() options.headless = True browser = Firefox(options=options) print(browser.capabilities['moz:headless']) browser.quit()
Solution
Step 1: Understand headless option effect on capabilities
Settingoptions.headless = Truetells Firefox to run without UI, reflected in capabilities under key 'moz:headless' as True.Step 2: Check the print statement output
The print statement accessesbrowser.capabilities['moz:headless'], which will be True because headless mode is enabled.Final Answer:
True -> Option BQuick Check:
Headless mode enabled means moz:headless = True [OK]
- Assuming 'moz:headless' key is missing
- Expecting False when headless is set True
- Confusing capabilities with options
from selenium.webdriver import Firefox from selenium.webdriver.firefox.options import Options options = Options() options.headless(True) browser = Firefox(options=options) browser.quit()
Solution
Step 1: Identify incorrect method call
The lineoptions.headless(True)incorrectly calls headless as a method, but it is a property to set.Step 2: Correct syntax for setting headless
It should beoptions.headless = Trueto enable headless mode properly.Final Answer:
Change options.headless(True) to options.headless = True -> Option AQuick Check:
Set headless as property, not method [OK]
- Calling headless as a method
- Confusing Options class import
- Misplacing browser.quit() call
Solution
Step 1: Identify correct method to set Firefox preferences
Useoptions.set_preference()to set Firefox-specific preferences like disabling notifications.Step 2: Verify preference key and value
The key'dom.webnotifications.enabled'controls notifications; setting it to False disables them.Final Answer:
options = FirefoxOptions() options.set_preference('dom.webnotifications.enabled', False) -> Option DQuick Check:
Use set_preference with correct key to disable notifications [OK]
- Using add_argument for Firefox preferences
- Setting non-existent properties like disable_notifications
- Confusing capabilities with preferences
Ready to prove it?
Pass the test and this pattern moves unknown
