Bird
Raised Fist0
Testing Fundamentalstesting~15 mins

User story testing in Testing Fundamentals - Build an Automation Script

Choose your learning style10 modes available
Verify login functionality based on user story
Preconditions (2)
Step 1: Enter 'user@example.com' in the email input field
Step 2: Enter 'Password123!' in the password input field
Step 3: Click the 'Login' button
Step 4: Wait for the dashboard page to load
✅ Expected Result: User is successfully logged in and redirected to the dashboard page with URL containing '/dashboard'
Automation Requirements - Selenium with Python
Assertions Needed:
Verify current URL contains '/dashboard'
Verify presence of a welcome message element on the dashboard page
Best Practices:
Use explicit waits to wait for elements to be visible or clickable
Use Page Object Model to separate page locators and actions
Use clear and descriptive 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 enter_email(self, email):
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.email_input)).clear()
        self.driver.find_element(*self.email_input).send_keys(email)

    def enter_password(self, password):
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.password_input)).clear()
        self.driver.find_element(*self.password_input).send_keys(password)

    def click_login(self):
        WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(self.login_button)).click()

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

    def is_welcome_message_displayed(self):
        return WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.welcome_message)) is not None

class TestLogin(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://example.com/login')

    def test_valid_login(self):
        login_page = LoginPage(self.driver)
        login_page.enter_email('user@example.com')
        login_page.enter_password('Password123!')
        login_page.click_login()

        # Wait for URL to contain '/dashboard'
        WebDriverWait(self.driver, 10).until(EC.url_contains('/dashboard'))

        self.assertIn('/dashboard', self.driver.current_url, 'URL does not contain /dashboard after login')

        dashboard_page = DashboardPage(self.driver)
        self.assertTrue(dashboard_page.is_welcome_message_displayed(), 'Welcome message not displayed on dashboard')

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

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

This test script uses Selenium with Python and unittest framework to automate the user story test case.

We define two page classes: LoginPage and DashboardPage to keep locators and actions organized (Page Object Model).

In test_valid_login, we enter the email and password, click login, then wait explicitly for the URL to contain '/dashboard'.

We assert the URL contains '/dashboard' and that the welcome message is visible on the dashboard page.

Explicit waits ensure the test waits for elements or URL changes properly, avoiding flaky tests.

The setUp and tearDown methods handle browser start and close for clean test runs.

Common Mistakes - 3 Pitfalls
{'mistake': 'Using time.sleep() instead of explicit waits', 'why_bad': 'It causes tests to wait longer than needed or fail if the page loads slower or faster than expected.', 'correct_approach': "Use Selenium's explicit waits like WebDriverWait with expected_conditions to wait for specific elements or URL changes."}
Hardcoding XPath locators that are brittle
Mixing locators and test logic in the test method
Bonus Challenge

Now add data-driven testing with 3 different sets of login credentials: one valid, two invalid

Show Hint

Practice

(1/5)
1. What is the main purpose of user story testing in software development?
easy
A. To verify that the software meets the user's needs and expectations
B. To check the software's installation process
C. To test the software's performance under heavy load
D. To review the software's code quality

Solution

  1. Step 1: Understand user story testing focus

    User story testing focuses on validating features from the user's perspective, ensuring the software solves real user problems.
  2. Step 2: Compare options to user story testing goal

    Options A, B, and D focus on technical or internal aspects, not user needs.
  3. Final Answer:

    To verify that the software meets the user's needs and expectations -> Option A
  4. Quick Check:

    User needs = Verify software meets needs [OK]
Hint: User story testing checks if software fits user needs [OK]
Common Mistakes:
  • Confusing user story testing with performance testing
  • Thinking it focuses on code quality
  • Assuming it tests installation or setup
2. Which of the following is the correct way to write a test scenario from a user story: "As a user, I want to log in so that I can access my dashboard"?
easy
A. Test if the login page loads within 5 seconds
B. Check if the database connection is active
C. Verify that entering valid credentials allows access to the dashboard
D. Measure the CPU usage during login

Solution

  1. Step 1: Identify the user story goal

    The story is about logging in to access the dashboard, so the test should check login success with valid credentials.
  2. Step 2: Match test scenarios to the story

    Verify that entering valid credentials allows access to the dashboard directly tests the login functionality as per the story. Options A, C, and D focus on performance or backend, not user goal.
  3. Final Answer:

    Verify that entering valid credentials allows access to the dashboard -> Option C
  4. Quick Check:

    Test scenario matches user goal [OK]
Hint: Test scenarios must match user story goals exactly [OK]
Common Mistakes:
  • Testing technical details unrelated to user goal
  • Confusing performance tests with functional tests
  • Ignoring the 'so that' part of the user story
3. Given the user story: "As a shopper, I want to add items to my cart so that I can buy them later", which test result indicates the feature works correctly?
medium
A. After adding an item, the cart shows the correct item and quantity
B. The website loads the homepage in under 2 seconds
C. The user receives an error when trying to add an item
D. The cart icon disappears after adding an item

Solution

  1. Step 1: Understand the user story's expected outcome

    The story expects items to be added to the cart and visible for later purchase.
  2. Step 2: Identify the test result that matches this outcome

    After adding an item, the cart shows the correct item and quantity confirms the cart updates correctly. Options A, B, and C do not confirm correct cart behavior.
  3. Final Answer:

    After adding an item, the cart shows the correct item and quantity -> Option A
  4. Quick Check:

    Cart updates correctly = Feature works [OK]
Hint: Look for test results that confirm user story success [OK]
Common Mistakes:
  • Confusing performance with functional correctness
  • Assuming errors mean success
  • Ignoring UI feedback like cart icon visibility
4. A tester wrote this test step for the user story "As an admin, I want to delete users": "Click the delete button and check if the user is removed". The test fails because the user is not deleted. What is the most likely error?
medium
A. The delete button was clicked twice accidentally
B. The test missed confirming the confirmation popup before deletion
C. The user was deleted but the page did not refresh
D. The test used the wrong user credentials

Solution

  1. Step 1: Analyze the test step and failure

    The test clicks delete but the user remains, suggesting a missing confirmation step.
  2. Step 2: Identify common deletion flow issues

    Many delete actions require confirming a popup; missing this blocks deletion. Options B, C, and D are less likely causes.
  3. Final Answer:

    The test missed confirming the confirmation popup before deletion -> Option B
  4. Quick Check:

    Missing confirmation popup blocks deletion [OK]
Hint: Check for confirmation dialogs in delete actions [OK]
Common Mistakes:
  • Ignoring confirmation popups
  • Assuming UI refresh means deletion
  • Not verifying correct user permissions
5. You have this user story: "As a user, I want to filter products by price so that I can find affordable options." Which of the following test cases best covers this story including edge cases?
hard
A. Test filtering with negative price values
B. Test filtering with only maximum price set to 100
C. Test filtering with price range 50 to 50
D. Test filtering with minimum price 0, maximum price 100, and no products in range

Solution

  1. Step 1: Understand the user story and edge cases

    The story requires filtering by price, including cases where no products match.
  2. Step 2: Evaluate test cases for coverage

    Test filtering with minimum price 0, maximum price 100, and no products in range tests a full range including zero and no matching products, covering normal and edge cases. Options B, C, and D miss some edge cases or use invalid inputs.
  3. Final Answer:

    Test filtering with minimum price 0, maximum price 100, and no products in range -> Option D
  4. Quick Check:

    Full range and no-match edge case tested [OK]
Hint: Include edge cases like empty results in user story tests [OK]
Common Mistakes:
  • Ignoring no-match scenarios
  • Testing only partial filters
  • Using invalid negative prices without story support
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