0
0
Testing Fundamentalstesting~15 mins

Why automation accelerates testing in Testing Fundamentals - Automation Benefits in Action

Choose your learning style9 modes available
Verify that automation speeds up regression testing
Preconditions (2)
Step 1: Open the login page
Step 2: Enter valid username 'user1@example.com' in the email field
Step 3: Enter valid password 'Password123!' in the password field
Step 4: Click the login button
Step 5: Verify that the dashboard page loads successfully
Step 6: Log out
Step 7: Repeat the above steps for 10 different users manually and record time taken
Step 8: Run the automated test script for the same 10 users and record time taken
✅ Expected Result: The automated test script completes all 10 login tests significantly faster than manual testing, demonstrating acceleration of testing by automation.
Automation Requirements - Selenium with Python
Assertions Needed:
Verify dashboard page URL after login
Verify presence of dashboard welcome message
Verify logout button is clickable
Best Practices:
Use explicit waits to handle page loading
Use Page Object Model to organize locators and actions
Use parameterization to run tests for multiple users
Avoid hardcoded sleeps
Use meaningful assertion messages
Automated Solution
Testing Fundamentals
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 LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.email_input = (By.ID, 'email')
        self.password_input = (By.ID, 'password')
        self.login_button = (By.ID, 'login-btn')

    def login(self, email, password):
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.email_input)).clear()
        self.driver.find_element(*self.email_input).send_keys(email)
        self.driver.find_element(*self.password_input).clear()
        self.driver.find_element(*self.password_input).send_keys(password)
        self.driver.find_element(*self.login_button).click()

class DashboardPage:
    def __init__(self, driver):
        self.driver = driver
        self.welcome_message = (By.ID, 'welcome-msg')
        self.logout_button = (By.ID, 'logout-btn')

    def is_loaded(self):
        return WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.welcome_message))

    def logout(self):
        WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(self.logout_button)).click()

class TestLoginAutomation(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://example.com/login')
        self.login_page = LoginPage(self.driver)
        self.dashboard_page = DashboardPage(self.driver)

    def test_login_multiple_users(self):
        users = [
            ('user1@example.com', 'Password123!'),
            ('user2@example.com', 'Password123!'),
            ('user3@example.com', 'Password123!'),
            ('user4@example.com', 'Password123!'),
            ('user5@example.com', 'Password123!'),
            ('user6@example.com', 'Password123!'),
            ('user7@example.com', 'Password123!'),
            ('user8@example.com', 'Password123!'),
            ('user9@example.com', 'Password123!'),
            ('user10@example.com', 'Password123!')
        ]
        for email, password in users:
            self.driver.get('https://example.com/login')
            self.login_page.login(email, password)
            self.assertIn('/dashboard', self.driver.current_url, f'URL after login for {email} should contain /dashboard')
            self.assertTrue(self.dashboard_page.is_loaded(), f'Dashboard welcome message should be visible for {email}')
            self.dashboard_page.logout()

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

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

This script uses Selenium WebDriver with Python's unittest framework to automate login tests for multiple users.

The LoginPage and DashboardPage classes follow the Page Object Model to keep locators and actions organized.

Explicit waits ensure elements are ready before interacting, avoiding flaky tests.

The test test_login_multiple_users loops through 10 user credentials, logging in and verifying the dashboard loads each time.

Assertions check the URL and presence of the welcome message to confirm successful login.

Logout is performed after each login to reset state.

This automation runs much faster than manual testing, showing how automation accelerates testing.

Common Mistakes - 4 Pitfalls
Using time.sleep() instead of explicit waits
Hardcoding locators inside test methods
Not parameterizing tests for multiple data inputs
Not quitting the browser after tests
Bonus Challenge

Now add data-driven testing with 3 different sets of user credentials using unittest subTest or pytest parameterization.

Show Hint