Submitting forms in Selenium Python - Build an Automation Script
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.
Now add data-driven testing with 3 different sets of form inputs to verify multiple submissions.