Bird
Raised Fist0
Selenium Pythontesting~15 mins

Submitting forms in Selenium Python - Build an Automation Script

Choose your learning style10 modes available
Submit Contact Us form and verify submission success
Preconditions (1)
Step 1: Enter 'John Doe' in the Name input field with id 'name'
Step 2: Enter 'john.doe@example.com' in the Email input field with id 'email'
Step 3: Enter 'Hello, this is a test message.' in the Message textarea with id 'message'
Step 4: Click the Submit button with id 'submit-btn'
✅ Expected Result: The page shows a success message with id 'success-msg' containing text 'Thank you for contacting us!'
Automation Requirements - Selenium with Python
Assertions Needed:
Verify the success message element is visible after form submission
Verify the success message text equals 'Thank you for contacting us!'
Best Practices:
Use explicit waits to wait for elements to be visible or clickable
Use By.ID locator strategy for stable element identification
Use Page Object Model pattern for maintainability (optional for this exercise)
Avoid hardcoded sleeps; use WebDriverWait instead
Automated Solution
Selenium Python
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


def test_submit_contact_form():
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver, 10)
    try:
        # Open Contact Us page
        driver.get('https://example.com/contact')

        # Fill Name field
        name_input = wait.until(EC.visibility_of_element_located((By.ID, 'name')))
        name_input.clear()
        name_input.send_keys('John Doe')

        # Fill Email field
        email_input = wait.until(EC.visibility_of_element_located((By.ID, 'email')))
        email_input.clear()
        email_input.send_keys('john.doe@example.com')

        # Fill Message textarea
        message_input = wait.until(EC.visibility_of_element_located((By.ID, 'message')))
        message_input.clear()
        message_input.send_keys('Hello, this is a test message.')

        # Click Submit button
        submit_button = wait.until(EC.element_to_be_clickable((By.ID, 'submit-btn')))
        submit_button.click()

        # Wait for success message
        success_msg = wait.until(EC.visibility_of_element_located((By.ID, 'success-msg')))

        # Assert success message text
        assert success_msg.text == 'Thank you for contacting us!', f"Expected success message text not found. Got: {success_msg.text}"

    finally:
        driver.quit()

This test script uses Selenium WebDriver with Python to automate the form submission.

First, it opens the Contact Us page URL.

Then it waits explicitly for each input field to be visible before interacting. This avoids errors if the page loads slowly.

It clears any existing text and enters the specified values for Name, Email, and Message fields.

Next, it waits for the Submit button to be clickable and clicks it.

After submission, it waits for the success message element to appear and verifies its text matches the expected confirmation message.

Finally, the browser is closed in the finally block to ensure cleanup even if assertions fail.

This approach uses explicit waits and By.ID locators for reliability and maintainability.

Common Mistakes - 4 Pitfalls
Using time.sleep() instead of explicit waits
Using brittle XPath locators like absolute paths
Not clearing input fields before sending keys
Not closing the browser after test
Bonus Challenge

Now add data-driven testing with 3 different sets of form inputs to verify multiple submissions.

Show Hint

Practice

(1/5)
1. What does the submit() method do in Selenium when testing forms?
easy
A. It sends the form data to the server by submitting the form.
B. It clears all input fields in the form.
C. It refreshes the current web page.
D. It closes the browser window.

Solution

  1. Step 1: Understand the purpose of submit()

    The submit() method is used to send the form data to the server by submitting the form element.
  2. Step 2: Compare with other options

    Clearing inputs, refreshing pages, or closing windows are not actions performed by submit().
  3. Final Answer:

    It sends the form data to the server by submitting the form. -> Option A
  4. Quick Check:

    submit() sends form data [OK]
Hint: Remember: submit() sends form data to server [OK]
Common Mistakes:
  • Confusing submit() with clear() method
  • Thinking submit() refreshes the page
  • Assuming submit() closes the browser
2. Which of the following is the correct way to submit a form using Selenium in Python?
easy
A. driver.submit(By.ID, 'form')
B. driver.submit_element(By.ID, 'form')
C. driver.find_element(By.ID, 'form').send_keys(Keys.ENTER)
D. driver.find_element(By.ID, 'form').submit()

Solution

  1. Step 1: Identify correct Selenium syntax for submitting a form

    The correct method is to locate the form element and call submit() on it, like driver.find_element(By.ID, 'form').submit().
  2. Step 2: Check other options for errors

    Options A and B use invalid method names. driver.find_element(By.ID, 'form').send_keys(Keys.ENTER) sends ENTER key but does not explicitly submit the form element.
  3. Final Answer:

    driver.find_element(By.ID, 'form').submit() -> Option D
  4. Quick Check:

    Use element.submit() to submit form [OK]
Hint: Use element.submit() after locating form [OK]
Common Mistakes:
  • Using driver.submit() which does not exist
  • Trying to submit with send_keys instead of submit()
  • Calling submit on driver instead of element
3. What will happen when the following Selenium Python code runs?
form = driver.find_element(By.NAME, 'loginForm')
form.submit()
medium
A. The form with name 'loginForm' will be submitted to the server.
B. An error will occur because submit() is not a valid method.
C. Nothing happens because submit() does not trigger form submission.
D. The browser will close automatically.

Solution

  1. Step 1: Locate the form element by name

    The code finds the form element with name 'loginForm' using find_element(By.NAME, 'loginForm').
  2. Step 2: Call submit() on the form element

    Calling submit() on the form element sends the form data to the server, triggering submission.
  3. Final Answer:

    The form with name 'loginForm' will be submitted to the server. -> Option A
  4. Quick Check:

    form.submit() submits form [OK]
Hint: submit() on form element sends data [OK]
Common Mistakes:
  • Thinking submit() is invalid method
  • Assuming submit() does nothing
  • Confusing submit() with browser close
4. You wrote this code to submit a form:
form = driver.find_element(By.ID, 'signupForm')
form.submit

Why does the form not submit when you run it?
medium
A. Because the form ID is incorrect.
B. Because submit() method was not called with parentheses.
C. Because submit() is not supported on forms.
D. Because the driver is not initialized.

Solution

  1. Step 1: Check method call syntax

    The code uses form.submit without parentheses, so the method is referenced but not executed.
  2. Step 2: Understand effect of missing parentheses

    Without parentheses, the form does not submit because the method is not called. Adding () calls the method.
  3. Final Answer:

    Because submit() method was not called with parentheses. -> Option B
  4. Quick Check:

    Call submit() with () to execute [OK]
Hint: Always use parentheses to call methods [OK]
Common Mistakes:
  • Forgetting parentheses after submit
  • Assuming submit is a property, not a method
  • Not verifying form locator correctness
5. You want to submit a form but only have access to an input field inside it. Which Selenium Python code correctly submits the form?
hard
A. form_element = driver.find_element(By.ID, 'form1') form_element.submit()
B. input_element = driver.find_element(By.NAME, 'email') driver.submit(input_element)
C. input_element = driver.find_element(By.NAME, 'email') input_element.submit()
D. driver.find_element(By.NAME, 'email').send_keys(Keys.RETURN)

Solution

  1. Step 1: Locate input inside the form

    You can find an input element inside the form using find_element(By.NAME, 'email').
  2. Step 2: Call submit() on the input element

    Calling submit() on any element inside the form submits the entire form.
  3. Final Answer:

    input_element = driver.find_element(By.NAME, 'email') input_element.submit() -> Option C
  4. Quick Check:

    submit() on input submits form [OK]
Hint: submit() on any form element submits the form [OK]
Common Mistakes:
  • Trying to call driver.submit() which does not exist
  • Using send_keys(Keys.RETURN) which may not submit form
  • Not calling submit() on an element
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