Why form handling is common in testing in Selenium Python - Automation Benefits in Action
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 import unittest class TestLoginForm(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get('https://example.com/login') self.wait = WebDriverWait(self.driver, 10) def test_login_form_submission(self): driver = self.driver wait = self.wait # Enter username username_field = wait.until(EC.visibility_of_element_located((By.ID, 'username'))) username_field.clear() username_field.send_keys('testuser') # Enter password password_field = wait.until(EC.visibility_of_element_located((By.ID, 'password'))) password_field.clear() password_field.send_keys('Test@1234') # Click login button login_button = wait.until(EC.element_to_be_clickable((By.ID, 'loginBtn'))) login_button.click() # Wait for dashboard URL wait.until(EC.url_contains('/dashboard')) # Assert URL contains '/dashboard' self.assertIn('/dashboard', driver.current_url) # Assert welcome message is visible and correct welcome_message = wait.until(EC.visibility_of_element_located((By.ID, 'welcomeMsg'))) self.assertIn('Welcome, testuser', welcome_message.text) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
This test script uses Selenium with Python's unittest framework to automate the login form submission.
setUp() opens the browser and navigates to the login page.
In test_login_form_submission(), it waits explicitly for each form field to be visible before entering data. This avoids timing issues.
The login button is clicked after waiting for it to be clickable.
After submission, the script waits for the URL to contain '/dashboard' to confirm navigation.
Assertions check that the URL is correct and the welcome message is displayed with the expected text.
tearDown() closes the browser after the test.
This structure ensures reliable, maintainable automation following best practices.
Now add data-driven testing with 3 different sets of username and password inputs
Practice
Solution
Step 1: Understand the role of forms on websites
Forms are used to collect user data like login info, search queries, or feedback.Step 2: Recognize why testing forms is important
Testing ensures the data entered is accepted and processed correctly by the application.Final Answer:
Because forms collect user input which needs to be tested for correctness -> Option AQuick Check:
Forms collect input = A [OK]
- Thinking Selenium can't handle buttons
- Assuming forms are rarely used
- Ignoring validation importance
Solution
Step 1: Identify the method to input text
Thesend_keys()method types text into input fields.Step 2: Differentiate from other methods
click()clicks elements,submit()submits forms,clear()clears text.Final Answer:
driver.find_element(By.ID, 'input').send_keys('text') -> Option CQuick Check:
send_keys() inputs text = A [OK]
- Using click() to enter text
- Confusing submit() with typing
- Forgetting to clear() before typing
from selenium.webdriver.common.by import By
input_field = driver.find_element(By.NAME, 'email')
input_field.send_keys('user@example.com')
print(input_field.get_attribute('value'))Solution
Step 1: Understand send_keys effect
Thesend_keys()method types the string into the input field.Step 2: Check what get_attribute('value') returns
This returns the current text inside the input field, which is the typed email.Final Answer:
user@example.com -> Option AQuick Check:
Typed text = get_attribute('value') = B [OK]
- Expecting get_attribute to return element name
- Confusing attribute with placeholder
- Assuming None if no submit
submit_button = driver.find_element(By.ID, 'submit')
submit_button.send_keys('submit')Solution
Step 1: Check method used on submit button
Thesend_keys()method types text, not clicks or submits.Step 2: Correct way to submit form via button
Useclick()on the button orsubmit()on the form element.Final Answer:
send_keys() is incorrect to submit a form button -> Option DQuick Check:
Use click() to submit button = C [OK]
- Using send_keys() to click buttons
- Confusing By.ID and By.CLASS_NAME
- Ignoring necessary imports
Solution
Step 1: Understand testing empty input handling
Submitting empty fields tests if the form validates required inputs properly.Step 2: Evaluate other options
Filling only one field or skipping submission won't test empty input handling fully.Final Answer:
Submit the form with empty fields and check for error messages -> Option BQuick Check:
Empty input test = submit empty + check errors = D [OK]
- Testing only with valid data
- Skipping form submission
- Filling partial fields without submit
Ready to prove it?
Pass the test and this pattern moves unknown
