Bird
Raised Fist0
Selenium Pythontesting~15 mins

File upload handling in Selenium Python - Build an Automation Script

Choose your learning style10 modes available
Verify file upload functionality on the upload page
Preconditions (2)
Step 1: Open the browser and navigate to http://example.com/upload
Step 2: Locate the file input field with id 'file-upload'
Step 3: Upload the file 'testfile.txt' using the file input field
Step 4: Click the upload button with id 'upload-button'
Step 5: Wait for the upload confirmation message with id 'upload-success' to appear
✅ Expected Result: The upload confirmation message 'File uploaded successfully' is displayed on the page
Automation Requirements - Selenium with Python
Assertions Needed:
Verify the upload confirmation message text is exactly 'File uploaded successfully'
Verify the confirmation message element is visible after upload
Best Practices:
Use explicit waits to wait for elements to be visible or clickable
Use By.ID locator strategy for stable element identification
Use absolute file path for file upload input
Handle browser setup and teardown properly
Automated Solution
Selenium Python
import unittest
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class TestFileUpload(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.wait = WebDriverWait(self.driver, 10)

    def test_file_upload(self):
        driver = self.driver
        wait = self.wait

        # Step 1: Open the upload page
        driver.get('http://example.com/upload')

        # Step 2: Locate file input field
        file_input = wait.until(EC.presence_of_element_located((By.ID, 'file-upload')))

        # Step 3: Upload the file
        file_path = os.path.abspath('testfile.txt')
        file_input.send_keys(file_path)

        # Step 4: Click upload button
        upload_button = wait.until(EC.element_to_be_clickable((By.ID, 'upload-button')))
        upload_button.click()

        # Step 5: Wait for confirmation message
        success_msg = wait.until(EC.visibility_of_element_located((By.ID, 'upload-success')))

        # Assertions
        self.assertTrue(success_msg.is_displayed(), 'Upload success message is not visible')
        self.assertEqual(success_msg.text, 'File uploaded successfully', 'Upload success message text mismatch')

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

This test script uses Python's unittest framework with Selenium WebDriver.

In setUp, we start the Chrome browser and set an explicit wait of 10 seconds.

The test test_file_upload follows the manual steps exactly:

  • Open the upload page URL.
  • Wait for the file input field by its ID and send the absolute path of the test file.
  • Wait for the upload button to be clickable and click it.
  • Wait for the success message to appear and verify it is visible and has the correct text.

Using explicit waits ensures the test waits only as long as needed for elements to appear or be clickable, avoiding flaky tests.

In tearDown, the browser closes to clean up after the test.

This structure keeps the test clear, reliable, and easy to maintain.

Common Mistakes - 4 Pitfalls
Using hardcoded relative file path without converting to absolute path
Using time.sleep() instead of explicit waits
Locating elements with brittle XPath or CSS selectors
Not verifying the upload confirmation message text
Bonus Challenge

Now add data-driven testing with 3 different files: 'testfile.txt', 'image.png', and 'document.pdf'

Show Hint

Practice

(1/5)
1. What is the primary Selenium method used to upload a file in a web form?
easy
A. send_keys() on the file input element
B. click() on the upload button
C. submit() on the form element
D. get() on the file path

Solution

  1. Step 1: Understand file upload in Selenium

    File upload is done by sending the file path to the file input element using send_keys().
  2. Step 2: Identify the correct method

    The send_keys() method inputs the file path string to the file input element, triggering the upload.
  3. Final Answer:

    send_keys() on the file input element -> Option A
  4. Quick Check:

    File upload = send_keys() [OK]
Hint: Use send_keys() on input type='file' to upload files [OK]
Common Mistakes:
  • Trying to click upload button instead of sending file path
  • Using submit() without sending file path
  • Using get() which loads URLs, not files
2. Which of the following is the correct way to upload a file using Selenium in Python?
easy
A. driver.find_element(By.ID, 'file').click('/path/to/file')
B. driver.find_element(By.ID, 'file').upload('/path/to/file')
C. driver.find_element(By.ID, 'file').send_keys('/path/to/file')
D. driver.find_element(By.ID, 'file').set_value('/path/to/file')

Solution

  1. Step 1: Recall Selenium file upload syntax

    The correct method to upload a file is send_keys() on the file input element.
  2. Step 2: Match the correct method call

    Only driver.find_element(By.ID, 'file').send_keys('/path/to/file') uses send_keys() correctly with the file path string.
  3. Final Answer:

    driver.find_element(By.ID, 'file').send_keys('/path/to/file') -> Option C
  4. Quick Check:

    send_keys() uploads file path [OK]
Hint: Use send_keys() with file path string on input element [OK]
Common Mistakes:
  • Using click() with file path argument
  • Using non-existent upload() or set_value() methods
  • Not passing absolute file path
3. What will be the result of this code snippet?
file_input = driver.find_element(By.NAME, 'upload')
file_input.send_keys('/home/user/document.txt')
print(file_input.get_attribute('value'))
medium
A. 'C:\\fakepath\\document.txt'
B. Empty string ''
C. Throws NoSuchElementException
D. Prints the file size

Solution

  1. Step 1: Understand send_keys effect on file input

    Sending a file path to the file input via send_keys() sets its value attribute to a browser-generated fake path 'C:\\fakepath\\document.txt' for security reasons.
  2. Step 2: Check get_attribute('value') output

    get_attribute('value') returns the fake path 'C:\\fakepath\\document.txt'.
  3. Final Answer:

    'C:\\fakepath\\document.txt' -> Option A
  4. Quick Check:

    send_keys() sets fake value attribute [OK]
Hint: get_attribute('value') shows fake path 'C:\\fakepath\\document.txt' [OK]
Common Mistakes:
  • Expecting the full file path instead of the fake path
  • Confusing attribute value with file content
  • Assuming print shows file size or content
4. You wrote this code to upload a file:
driver.find_element(By.CSS_SELECTOR, 'input[type="file"]').click()
driver.find_element(By.CSS_SELECTOR, 'input[type="file"]').send_keys('/path/to/file')

But the file is not uploaded. What is the likely problem?
medium
A. send_keys() requires a relative path, not absolute
B. Calling click() before send_keys() on file input blocks upload
C. CSS selector 'input[type="file"]' is invalid
D. File input elements cannot be automated

Solution

  1. Step 1: Analyze click() effect on file input

    Calling click() opens the OS file dialog, which Selenium cannot control, blocking automation.
  2. Step 2: Understand correct upload method

    Only send_keys() with the file path is needed; clicking before it can interfere.
  3. Final Answer:

    Calling click() before send_keys() on file input blocks upload -> Option B
  4. Quick Check:

    Don't click file input before send_keys() [OK]
Hint: Avoid click() on file input; just use send_keys() [OK]
Common Mistakes:
  • Clicking file input triggers OS dialog blocking automation
  • Using relative instead of absolute file paths
  • Assuming CSS selector is invalid without checking
5. You want to upload a file using Selenium but the file input element is hidden (style='display:none'). Which approach is best to handle this?
hard
A. Use send_keys() directly on hidden element
B. Upload file via browser DevTools network interception
C. Click the hidden element to open file dialog
D. Use JavaScript to remove 'display:none' and then send_keys()

Solution

  1. Step 1: Understand hidden file input behavior

    Hidden inputs cannot receive send_keys() because they are not interactable.
  2. Step 2: Use JavaScript to make element visible

    Removing 'display:none' via JavaScript makes the element interactable, allowing send_keys() to work.
  3. Step 3: Avoid clicking hidden elements or network hacks

    Clicking hidden elements fails; network interception is complex and not standard for file upload.
  4. Final Answer:

    Use JavaScript to remove 'display:none' and then send_keys() -> Option D
  5. Quick Check:

    Make hidden input visible before send_keys() [OK]
Hint: Make hidden input visible with JS before send_keys() [OK]
Common Mistakes:
  • Trying send_keys() on hidden element directly
  • Clicking hidden element expecting file dialog
  • Using complex network interception unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard