Bird
Raised Fist0
Selenium Pythontesting~8 mins

Checking element state (displayed, enabled, selected) in Selenium Python - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Checking element state (displayed, enabled, selected)
Folder Structure
my_selenium_project/
├── src/
│   ├── pages/
│   │   └── login_page.py
│   ├── tests/
│   │   └── test_login.py
│   ├── utils/
│   │   └── element_state_helpers.py
│   └── config/
│       └── config.py
├── drivers/
│   └── chromedriver.exe
├── reports/
│   └── test_report.html
├── requirements.txt
└── pytest.ini
Test Framework Layers
  • Driver Layer: Manages browser drivers and WebDriver setup (e.g., ChromeDriver).
  • Page Objects: Classes representing web pages with methods to interact with elements and check their states (displayed, enabled, selected).
  • Tests: Test scripts using page objects to perform actions and assert element states.
  • Utilities: Helper functions for common element state checks to keep code clean and reusable.
  • Configuration: Settings for environment URLs, browser options, and credentials.
Configuration Patterns
  • Use a config.py file to store environment URLs, browser types, and credentials as variables or dictionaries.
  • Use command-line options or environment variables to select browser type (e.g., Chrome, Firefox) at runtime.
  • Keep sensitive data like passwords out of code by using environment variables or secure vaults.
  • Example snippet in config.py:
    BASE_URL = "https://example.com"
    BROWSER = "chrome"
    USER_CREDENTIALS = {"username": "testuser", "password": "secret"}
Test Reporting and CI/CD Integration
  • Use pytest with plugins like pytest-html to generate readable HTML test reports showing pass/fail results.
  • Configure CI/CD pipelines (GitHub Actions, Jenkins) to run tests on each code push and publish reports.
  • Include screenshots on failure to help debug element state issues.
  • Example pytest command for report:
    pytest --html=reports/test_report.html --self-contained-html
Best Practices
  • Use Explicit Waits: Wait for elements to be in the expected state (visible, enabled) before interacting to avoid flaky tests.
  • Encapsulate State Checks: Put element state checks (is_displayed, is_enabled, is_selected) inside page object methods for reuse and clarity.
  • Clear Naming: Name methods clearly, e.g., is_login_button_enabled(), so tests read like plain English.
  • Keep Tests Independent: Each test should set up its own state and not rely on previous tests for element states.
  • Use Assertions Properly: Assert element states explicitly to catch failures early and provide clear error messages.
Self Check

Where in this folder structure would you add a new method to check if a "Remember Me" checkbox is selected on the login page?

Key Result
Organize Selenium Python tests with clear layers: driver setup, page objects with element state methods, tests, utilities, and config for clean, reliable checks of displayed, enabled, and selected states.

Practice

(1/5)
1. Which Selenium method checks if a web element is visible on the page?
easy
A. is_enabled()
B. is_visible()
C. is_selected()
D. is_displayed()

Solution

  1. Step 1: Understand the purpose of is_displayed()

    This method returns True if the element is visible to the user on the page.
  2. Step 2: Compare with other methods

    is_enabled() checks if the element can be interacted with, is_selected() checks selection state, and is_visible() is not a valid Selenium method.
  3. Final Answer:

    is_displayed() -> Option D
  4. Quick Check:

    Visibility check = is_displayed() [OK]
Hint: Visible? Use is_displayed() method [OK]
Common Mistakes:
  • Confusing is_enabled() with visibility
  • Using is_selected() for visibility
  • Assuming is_visible() exists in Selenium
2. Which of the following is the correct syntax to check if a checkbox element is selected in Selenium Python?
easy
A. checkbox.is_selected()
B. checkbox.selected()
C. checkbox.isSelected()
D. checkbox.selected

Solution

  1. Step 1: Recall Selenium Python method names

    In Selenium Python, the method to check selection is is_selected() with underscores and parentheses.
  2. Step 2: Identify incorrect syntax

    selected() and selected are invalid; isSelected() is Java style, not Python.
  3. Final Answer:

    checkbox.is_selected() -> Option A
  4. Quick Check:

    Check selected? Use is_selected() [OK]
Hint: Use is_selected() with parentheses for selection check [OK]
Common Mistakes:
  • Using Java method style isSelected() in Python
  • Omitting parentheses after method name
  • Using property 'selected' instead of method
3. Given the following code snippet, what will be the output if the button is visible but disabled?
button = driver.find_element(By.ID, 'submit')
print(button.is_displayed())
print(button.is_enabled())
medium
A. True\nFalse
B. False\nTrue
C. True\nTrue
D. False\nFalse

Solution

  1. Step 1: Understand is_displayed() output

    Since the button is visible, is_displayed() returns True.
  2. Step 2: Understand is_enabled() output

    The button is disabled, so is_enabled() returns False.
  3. Final Answer:

    True\nFalse -> Option A
  4. Quick Check:

    Visible = True, Enabled = False [OK]
Hint: Visible True, Enabled False if button disabled [OK]
Common Mistakes:
  • Assuming disabled means not visible
  • Mixing up is_displayed() and is_enabled() results
  • Expecting both to be True for visible button
4. You wrote this code to check if a checkbox is selected:
checkbox = driver.find_element(By.NAME, 'agree')
if checkbox.selected():
    print('Selected')
else:
    print('Not selected')
What is the error here?
medium
A. Print statements should be inside quotes
B. Missing parentheses after find_element
C. selected() is not a valid method; should use is_selected()
D. Checkbox element locator is incorrect

Solution

  1. Step 1: Check method name for selection

    The correct method to check selection in Selenium Python is is_selected(), not selected().
  2. Step 2: Verify other code parts

    Parentheses after find_element are correct, locator looks valid, and print statements are properly quoted.
  3. Final Answer:

    selected() is not a valid method; should use is_selected() -> Option C
  4. Quick Check:

    Use is_selected() method for checkbox state [OK]
Hint: Use is_selected(), not selected() method [OK]
Common Mistakes:
  • Using selected() instead of is_selected()
  • Confusing method names with Java syntax
  • Ignoring method parentheses
5. You want to write a test that clicks a button only if it is visible and enabled. Which code snippet correctly checks these conditions before clicking?
button = driver.find_element(By.ID, 'save')
hard
A. if button.is_displayed() or button.is_enabled(): button.click()
B. if button.is_displayed() and button.is_enabled(): button.click()
C. if button.is_selected() and button.is_enabled(): button.click()
D. if button.is_enabled(): button.click()

Solution

  1. Step 1: Identify conditions for clicking

    The button must be visible (is_displayed()) and enabled (is_enabled()) to be safely clicked.
  2. Step 2: Analyze each option

    if button.is_displayed() and button.is_enabled(): button.click() uses both conditions with 'and', which is correct. if button.is_selected() and button.is_enabled(): button.click() wrongly uses is_selected() which is for checkboxes/radios. if button.is_displayed() or button.is_enabled(): button.click() uses 'or' which may click if only one condition is true. if button.is_enabled(): button.click() checks only enabled, ignoring visibility.
  3. Final Answer:

    if button.is_displayed() and button.is_enabled():\n button.click() -> Option B
  4. Quick Check:

    Click only if visible AND enabled [OK]
Hint: Use and with is_displayed() and is_enabled() before click [OK]
Common Mistakes:
  • Using or instead of and for conditions
  • Checking is_selected() for buttons
  • Ignoring visibility check before clicking
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