Bird
Raised Fist0
Selenium Pythontesting~15 mins

Radio button interactions in Selenium Python - Build an Automation Script

Choose your learning style10 modes available
Verify radio button selection on the preferences form
Preconditions (1)
Step 1: Locate the radio button group labeled 'Subscription Type'
Step 2: Select the radio button with label 'Monthly'
Step 3: Verify that the 'Monthly' radio button is selected
Step 4: Select the radio button with label 'Yearly'
Step 5: Verify that the 'Yearly' radio button is selected and 'Monthly' is not selected
✅ Expected Result: The radio buttons allow only one selection at a time. Selecting 'Monthly' marks it selected. Selecting 'Yearly' deselects 'Monthly' and marks 'Yearly' selected.
Automation Requirements - Selenium with Python
Assertions Needed:
Assert that the 'Monthly' radio button is selected after clicking it
Assert that the 'Yearly' radio button is selected after clicking it
Assert that only one radio button is selected at a time
Best Practices:
Use explicit waits to wait for elements to be clickable
Use By.ID or By.NAME locators for radio buttons
Use Page Object Model to separate page structure from test logic
Avoid hardcoded sleeps
Use clear assertion messages
Automated Solution
Selenium Python
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 PreferencesPage:
    def __init__(self, driver):
        self.driver = driver
        self.monthly_radio = (By.ID, 'subscription_monthly')
        self.yearly_radio = (By.ID, 'subscription_yearly')

    def select_monthly(self):
        WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable(self.monthly_radio)
        ).click()

    def select_yearly(self):
        WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable(self.yearly_radio)
        ).click()

    def is_monthly_selected(self):
        return self.driver.find_element(*self.monthly_radio).is_selected()

    def is_yearly_selected(self):
        return self.driver.find_element(*self.yearly_radio).is_selected()

class TestRadioButtonSelection(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://example.com/preferences')
        self.page = PreferencesPage(self.driver)

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

    def test_radio_button_selection(self):
        # Select Monthly and verify
        self.page.select_monthly()
        self.assertTrue(self.page.is_monthly_selected(), "Monthly radio button should be selected")
        self.assertFalse(self.page.is_yearly_selected(), "Yearly radio button should not be selected when Monthly is selected")

        # Select Yearly and verify
        self.page.select_yearly()
        self.assertTrue(self.page.is_yearly_selected(), "Yearly radio button should be selected")
        self.assertFalse(self.page.is_monthly_selected(), "Monthly radio button should not be selected when Yearly is selected")

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

This test script uses Selenium with Python and unittest framework.

The PreferencesPage class is a Page Object that holds locators and actions for the radio buttons. It uses By.ID locators for the 'Monthly' and 'Yearly' radio buttons, which is a best practice for stable selectors.

Explicit waits (WebDriverWait) ensure the radio buttons are clickable before clicking, avoiding flaky tests.

The test test_radio_button_selection selects 'Monthly' first and asserts it is selected while 'Yearly' is not. Then it selects 'Yearly' and asserts the opposite. This confirms only one radio button is selected at a time.

Assertions have clear messages to help understand failures.

The setUp and tearDown methods handle browser start and cleanup.

This structure keeps test logic clean and maintainable.

Common Mistakes - 4 Pitfalls
Using time.sleep() instead of explicit waits
Using brittle XPath locators like absolute paths
Not verifying that only one radio button is selected at a time
Mixing test logic and page structure in the same code
Bonus Challenge

Now add data-driven testing with 3 different subscription types: 'Monthly', 'Yearly', and 'Weekly' (assume 'Weekly' radio button exists with ID 'subscription_weekly').

Show Hint

Practice

(1/5)
1. What does the is_selected() method do when used on a radio button element in Selenium?
easy
A. Checks if the radio button is currently selected
B. Clicks the radio button to select it
C. Returns the text label of the radio button
D. Clears the selection of the radio button

Solution

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

    This method checks the current state of a radio button or checkbox to see if it is selected or not.
  2. Step 2: Compare with other actions

    Unlike click() which changes the state, is_selected() only returns a boolean indicating selection status.
  3. Final Answer:

    Checks if the radio button is currently selected -> Option A
  4. Quick Check:

    Check selection status = C [OK]
Hint: Remember: is_selected() checks state, click() changes it [OK]
Common Mistakes:
  • Confusing is_selected() with click()
  • Expecting is_selected() to select the button
  • Using is_selected() to get button text
2. Which of the following is the correct way to select a radio button with Selenium in Python?
easy
A. driver.find_element(By.ID, 'option1').choose()
B. driver.find_element(By.ID, 'option1').select()
C. driver.find_element(By.ID, 'option1').check()
D. driver.find_element(By.ID, 'option1').click()

Solution

  1. Step 1: Identify the correct method to select a radio button

    In Selenium, click() is used to select radio buttons or checkboxes.
  2. Step 2: Verify method names

    Methods like select(), check(), or choose() do not exist in Selenium WebDriver API.
  3. Final Answer:

    driver.find_element(By.ID, 'option1').click() -> Option D
  4. Quick Check:

    Use click() to select radio buttons = A [OK]
Hint: Use click() to select radio buttons, no select() method [OK]
Common Mistakes:
  • Using non-existent methods like select()
  • Trying to assign value instead of clicking
  • Confusing with form select elements
3. Consider this code snippet:
radio1 = driver.find_element(By.ID, 'r1')
radio2 = driver.find_element(By.ID, 'r2')
radio1.click()
print(radio1.is_selected())
print(radio2.is_selected())

What will be the output if these are radio buttons in the same group?
medium
A. True\nFalse
B. False\nTrue
C. True\nTrue
D. False\nFalse

Solution

  1. Step 1: Understand radio button group behavior

    Clicking one radio button selects it and deselects others in the same group.
  2. Step 2: Analyze the code output

    After clicking radio1, radio1.is_selected() returns True, and radio2.is_selected() returns False.
  3. Final Answer:

    True False -> Option A
  4. Quick Check:

    One selected, others deselected = B [OK]
Hint: Only one radio button in group is selected at a time [OK]
Common Mistakes:
  • Assuming both radio buttons can be selected
  • Confusing is_selected() output order
  • Ignoring group behavior of radio buttons
4. You wrote this code to select a radio button:
radio = driver.find_element(By.NAME, 'gender')
radio.click()

But it always selects the first radio button in the group, not the intended one. What is the likely problem?
medium
A. The click() method is incorrect for radio buttons
B. Using By.NAME returns multiple elements; need to specify which one
C. Radio buttons cannot be selected by Selenium
D. The radio button is disabled and cannot be clicked

Solution

  1. Step 1: Understand how find_element(By.NAME) works

    This method returns the first matching element with the given name attribute.
  2. Step 2: Identify the issue with multiple radio buttons sharing the same name

    Radio buttons in a group share the same name, so you must select the correct one by index or another attribute.
  3. Final Answer:

    Using By.NAME returns multiple elements; need to specify which one -> Option B
  4. Quick Check:

    By.NAME returns first element only = A [OK]
Hint: Use find_elements and index to pick correct radio button [OK]
Common Mistakes:
  • Assuming By.NAME returns all elements
  • Using click() incorrectly
  • Ignoring radio button group naming
5. You want to write a test to verify that selecting one radio button deselects the others in the same group. Which code snippet correctly performs this check?
hard
A. radio_buttons = driver.find_elements(By.ID, 'color') radio_buttons[0].click() assert radio_buttons[1].is_selected()
B. radio_buttons = driver.find_element(By.NAME, 'color') radio_buttons.click() assert radio_buttons.is_selected()
C. radio_buttons = driver.find_elements(By.NAME, 'color') radio_buttons[1].click() assert radio_buttons[1].is_selected() and not radio_buttons[0].is_selected()
D. radio_buttons = driver.find_elements(By.CLASS_NAME, 'color') radio_buttons.click() assert radio_buttons[0].is_selected()

Solution

  1. Step 1: Select all radio buttons by group name

    Use find_elements(By.NAME, 'color') to get all radio buttons in the group.
  2. Step 2: Click one button and assert selection states

    Click the second button, then assert it is selected and the first is not.
  3. Final Answer:

    radio_buttons = driver.find_elements(By.NAME, 'color') radio_buttons[1].click() assert radio_buttons[1].is_selected() and not radio_buttons[0].is_selected() -> Option C
  4. Quick Check:

    Click one, check selected and deselected = D [OK]
Hint: Use find_elements and assert one selected, others not [OK]
Common Mistakes:
  • Using find_element instead of find_elements
  • Not checking deselection of other buttons
  • Wrong locator type for radio group
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