Bird
Raised Fist0
Selenium Pythontesting~8 mins

Find element by tag name in Selenium Python - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Find element by tag name
Folder Structure
selenium_python_project/
├── src/
│   ├── pages/
│   │   └── home_page.py
│   ├── tests/
│   │   └── test_home_page.py
│   ├── utils/
│   │   └── driver_factory.py
│   └── config/
│       └── config.py
├── requirements.txt
└── pytest.ini
    
Test Framework Layers
  • Driver Layer: Manages browser setup and teardown (e.g., driver_factory.py).
  • Page Objects: Encapsulate page elements and actions using locators like tag name (e.g., home_page.py).
  • Tests: Test cases that use page objects to perform actions and assertions (e.g., test_home_page.py).
  • Utilities: Helper functions and reusable code.
  • Configuration: Environment settings, browser options, and credentials (e.g., config.py).
Configuration Patterns

Use a config.py file to store environment URLs, browser choices, and credentials.

Example:

# config/config.py
BASE_URL = "https://example.com"
BROWSER = "chrome"
IMPLICIT_WAIT = 10
    

Use environment variables or command-line options to switch browsers or environments without changing code.

Test Reporting and CI/CD Integration
  • Use pytest with plugins like pytest-html for readable HTML reports.
  • Integrate with CI/CD tools (GitHub Actions, Jenkins) to run tests automatically on code changes.
  • Configure reports to show pass/fail status and screenshots on failure.
Best Practices
  • Use Page Object Model: Keep locators and actions in page classes for easy maintenance.
  • Prefer explicit waits: Wait for elements by tag name to be visible or clickable before interacting.
  • Use meaningful locators: Tag name is simple but often combined with other attributes for precision.
  • Keep tests independent: Each test should set up and clean up its own state.
  • Store config separately: Avoid hardcoding URLs or browser names in test code.
Self Check

Where would you add a new page object class for a page that contains elements you want to find by tag name?

Key Result
Organize Selenium Python tests with clear layers: driver setup, page objects using tag name locators, tests, utilities, and config for maintainability.

Practice

(1/5)
1. What does find_element(By.TAG_NAME, 'button') do in Selenium Python?
easy
A. Finds all <button> elements on the page
B. Finds elements by their ID 'button'
C. Finds elements by their class name 'button'
D. Finds the first <button> element on the page

Solution

  1. Step 1: Understand the method used

    The method find_element returns the first matching element found.
  2. Step 2: Understand the locator type

    Using By.TAG_NAME with 'button' searches for the first <button> tag element.
  3. Final Answer:

    Finds the first <button> element on the page -> Option D
  4. Quick Check:

    find_element + TAG_NAME = first matching tag element [OK]
Hint: find_element + TAG_NAME finds only the first matching tag [OK]
Common Mistakes:
  • Confusing find_element with find_elements
  • Using class name or ID instead of tag name
  • Expecting all elements instead of first only
2. Which of the following is the correct syntax to find all p elements using Selenium Python?
easy
A. driver.find_element_by_tag_name('p')
B. driver.find_element(By.TAG_NAME, 'p')
C. driver.find_elements(By.TAG_NAME, 'p')
D. driver.find_elements_by_class_name('p')

Solution

  1. Step 1: Identify method for multiple elements

    To get all matching elements, use find_elements (plural).
  2. Step 2: Use correct locator for tag name

    Use By.TAG_NAME with the tag string 'p'.
  3. Final Answer:

    driver.find_elements(By.TAG_NAME, 'p') -> Option C
  4. Quick Check:

    find_elements + TAG_NAME = all matching tags [OK]
Hint: Use find_elements (plural) to get all elements by tag [OK]
Common Mistakes:
  • Using find_element instead of find_elements
  • Using deprecated find_element_by_tag_name syntax
  • Confusing class name locator with tag name
3. Given the HTML:
<div>
  <button>Click</button>
  <button>Submit</button>
</div>

What will driver.find_element(By.TAG_NAME, 'button').text return?
medium
A. "ClickSubmit"
B. "Click"
C. "Submit"
D. Throws NoSuchElementException

Solution

  1. Step 1: Understand find_element behavior

    It returns the first matching element by tag name, which is the first <button> with text "Click".
  2. Step 2: Access the text property

    The .text attribute returns the visible text inside that element, which is "Click".
  3. Final Answer:

    "Click" -> Option B
  4. Quick Check:

    First button text = "Click" [OK]
Hint: find_element returns first tag; .text shows its text content [OK]
Common Mistakes:
  • Assuming it returns all buttons' text combined
  • Confusing find_element with find_elements
  • Expecting an exception when element exists
4. You wrote this code:
element = driver.find_elements(By.TAG_NAME, 'img')

But you get an error when trying element.click(). What is the problem?
medium
A. find_elements returns a list, not a single element
B. The tag name 'img' is invalid
C. click() cannot be used on images
D. You must use find_element instead of find_elements

Solution

  1. Step 1: Understand return type of find_elements

    find_elements returns a list of WebElements, not a single element.
  2. Step 2: Identify why click() fails

    Calling click() on a list causes an error because lists don't have click method.
  3. Final Answer:

    find_elements returns a list, not a single element -> Option A
  4. Quick Check:

    find_elements = list, cannot call click() directly [OK]
Hint: find_elements returns list; call click() on list item, not list [OK]
Common Mistakes:
  • Calling click() on list instead of element
  • Confusing find_element and find_elements return types
  • Assuming all tags support click() without checking
5. You want to click the second button on a page. Which code correctly finds and clicks it using tag name?
hard
A. buttons = driver.find_elements(By.TAG_NAME, 'button') buttons[1].click()
B. button = driver.find_element(By.TAG_NAME, 'button') button[1].click()
C. button = driver.find_elements(By.TAG_NAME, 'button') button.click()
D. buttons = driver.find_element(By.TAG_NAME, 'button') buttons.click()

Solution

  1. Step 1: Use find_elements to get all buttons

    Use find_elements(By.TAG_NAME, 'button') to get a list of all button elements.
  2. Step 2: Access second button and click

    Index 1 accesses the second button (0-based index), then call click() on it.
  3. Final Answer:

    buttons = driver.find_elements(By.TAG_NAME, 'button') buttons[1].click() -> Option A
  4. Quick Check:

    find_elements + index + click = correct usage [OK]
Hint: Use find_elements, index second item, then click [OK]
Common Mistakes:
  • Using find_element and indexing it like a list
  • Calling click() on list instead of element
  • Using wrong index (like 2 instead of 1 for second element)
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