0
0
Testing Fundamentalstesting~15 mins

Skills for modern testers in Testing Fundamentals - Build an Automation Script

Choose your learning style9 modes available
Verify tester skills checklist on skills page
Preconditions (2)
Step 1: Open the Skills page URL
Step 2: Locate the skills checklist section
Step 3: Verify the checklist contains the following skills: 'Critical Thinking', 'Automation Knowledge', 'Communication', 'Domain Understanding', 'Exploratory Testing', 'Continuous Learning'
Step 4: Check that each skill item is visible and enabled
✅ Expected Result: The skills checklist is displayed with all required skills visible and enabled
Automation Requirements - Selenium with Python
Assertions Needed:
Verify page URL is correct
Verify each skill text is present in the checklist
Verify each skill item is visible and enabled
Best Practices:
Use explicit waits to wait for elements
Use Page Object Model for maintainability
Use descriptive locators (e.g., By.ID, By.CSS_SELECTOR)
Use assertions from unittest or pytest
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 SkillsPage:
    def __init__(self, driver):
        self.driver = driver
        self.skills_section_locator = (By.ID, 'skills-checklist')
        self.skill_items_locator = (By.CSS_SELECTOR, '#skills-checklist li')

    def wait_for_skills_section(self):
        WebDriverWait(self.driver, 10).until(
            EC.visibility_of_element_located(self.skills_section_locator)
        )

    def get_skills_texts(self):
        elements = self.driver.find_elements(*self.skill_items_locator)
        return [el.text.strip() for el in elements]

class TestSkillsForModernTesters(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://example.com/skills')
        self.skills_page = SkillsPage(self.driver)

    def test_skills_checklist(self):
        # Verify URL
        self.assertIn('/skills', self.driver.current_url)

        # Wait for skills section
        self.skills_page.wait_for_skills_section()

        # Expected skills
        expected_skills = [
            'Critical Thinking',
            'Automation Knowledge',
            'Communication',
            'Domain Understanding',
            'Exploratory Testing',
            'Continuous Learning'
        ]

        # Get actual skills
        actual_skills = self.skills_page.get_skills_texts()

        # Verify all expected skills are present
        for skill in expected_skills:
            self.assertIn(skill, actual_skills, f"Skill '{skill}' not found in checklist")

        # Verify each skill item is visible and enabled
        skill_elements = self.driver.find_elements(*self.skills_page.skill_items_locator)
        for el in skill_elements:
            self.assertTrue(el.is_displayed(), f"Skill item '{el.text}' is not visible")
            self.assertTrue(el.is_enabled(), f"Skill item '{el.text}' is not enabled")

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

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

This test script uses Selenium with Python and unittest framework.

We define a SkillsPage class to hold locators and methods for the skills checklist section, following the Page Object Model for easy maintenance.

The test test_skills_checklist does these steps:

  • Checks the URL contains '/skills' to confirm correct page.
  • Waits explicitly for the skills checklist section to be visible.
  • Retrieves all skill items text from the checklist.
  • Verifies each expected skill is present in the list.
  • Checks each skill item is visible and enabled on the page.

Explicit waits ensure the page elements are ready before interacting.

Assertions provide clear failure messages if any skill is missing or not visible/enabled.

The setUp and tearDown methods handle browser start and cleanup.

Common Mistakes - 4 Pitfalls
Using time.sleep() instead of explicit waits
Using brittle XPath locators that rely on exact element positions
Not verifying the page URL before checking elements
Not using Page Object Model, putting locators and logic directly in test
Bonus Challenge

Now add data-driven testing with 3 different sets of expected skills lists for different user roles.

Show Hint