Bird
Raised Fist0
Selenium Pythontesting~15 mins

Multi-select handling in Selenium Python - Build an Automation Script

Choose your learning style10 modes available
Verify multi-select dropdown selection and deselection
Preconditions (1)
Step 1: Locate the multi-select dropdown by its id 'fruits'
Step 2: Select the options 'Apple' and 'Banana' by visible text
Step 3: Verify that both 'Apple' and 'Banana' are selected
Step 4: Deselect the option 'Apple'
Step 5: Verify that only 'Banana' remains selected
✅ Expected Result: The multi-select dropdown allows selecting multiple options. After deselecting 'Apple', only 'Banana' remains selected.
Automation Requirements - Selenium with Python
Assertions Needed:
Assert that 'Apple' and 'Banana' options are selected after selection
Assert that only 'Banana' is selected after deselecting 'Apple'
Best Practices:
Use Selenium's Select class for multi-select dropdown handling
Use explicit waits if necessary before interacting
Use clear and maintainable locators (By.ID)
Use assertions from unittest or pytest for validation
Automated Solution
Selenium Python
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
import unittest

class TestMultiSelect(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://example.com/multiselect')  # Replace with actual URL

    def test_multi_select_handling(self):
        driver = self.driver
        select_element = driver.find_element(By.ID, 'fruits')
        select = Select(select_element)

        # Select 'Apple' and 'Banana'
        select.select_by_visible_text('Apple')
        select.select_by_visible_text('Banana')

        # Verify both are selected
        selected_options = [opt.text for opt in select.all_selected_options]
        self.assertIn('Apple', selected_options, "Apple should be selected")
        self.assertIn('Banana', selected_options, "Banana should be selected")

        # Deselect 'Apple'
        select.deselect_by_visible_text('Apple')

        # Verify only 'Banana' remains selected
        selected_options_after = [opt.text for opt in select.all_selected_options]
        self.assertNotIn('Apple', selected_options_after, "Apple should be deselected")
        self.assertIn('Banana', selected_options_after, "Banana should still be selected")

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

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

This test uses Selenium WebDriver with Python's unittest framework.

In setUp, the browser opens the target page with the multi-select dropdown.

We locate the dropdown by its id='fruits' and create a Select object to handle multi-select options easily.

We select 'Apple' and 'Banana' by their visible text, then check that both appear in the list of selected options.

Next, we deselect 'Apple' and verify that only 'Banana' remains selected.

Assertions ensure the test fails if the selections do not match expectations.

Finally, tearDown closes the browser to clean up.

Common Mistakes - 4 Pitfalls
{'mistake': "Using find_element and clicking options instead of using Selenium's Select class", 'why_bad': 'Manually clicking options is error-prone and less readable; Select class provides clear methods for multi-select handling.', 'correct_approach': "Use Selenium's Select class to select and deselect options by visible text or value."}
Not verifying the selected options after selection or deselection
Using hardcoded XPath locators that are brittle
Not closing the browser after test execution
Bonus Challenge

Now add data-driven testing to select and deselect multiple sets of fruits: ['Apple', 'Banana'], ['Orange', 'Grape'], ['Banana', 'Grape']

Show Hint

Practice

(1/5)
1. What does the Select class in Selenium help you do when testing multi-select dropdowns?
easy
A. Only select the first option in a dropdown
B. Select multiple options from a dropdown list
C. Automatically submit the form
D. Close the browser window

Solution

  1. Step 1: Understand the purpose of the Select class

    The Select class is designed to interact with dropdown elements, especially those that allow multiple selections.
  2. Step 2: Identify multi-select capability

    It provides methods like select_by_visible_text to pick multiple options, which is not possible with simple click commands.
  3. Final Answer:

    Select multiple options from a dropdown list -> Option B
  4. Quick Check:

    Select class = multi-option selection [OK]
Hint: Select class is for dropdowns, including multi-selects [OK]
Common Mistakes:
  • Thinking Select only picks one option
  • Confusing Select with browser control commands
  • Assuming Select submits forms automatically
2. Which of the following is the correct way to select multiple options by visible text using Selenium's Select class in Python?
easy
A. select.select_by_visible_text(['Option1', 'Option2'])
B. select.select_by_index([1, 2])
C. select.select_by_visible_text('Option1'); select.select_by_visible_text('Option2')
D. select.select('Option1', 'Option2')

Solution

  1. Step 1: Review method usage for selecting multiple options

    The select_by_visible_text method accepts a single string, so to select multiple options, call it multiple times separately.
  2. Step 2: Analyze each option

    select.select_by_visible_text(['Option1', 'Option2']) tries to pass a list directly, which is invalid. select.select_by_visible_text('Option1'); select.select_by_visible_text('Option2') calls the method twice correctly. select.select_by_index([1, 2]) uses select_by_index with a list, which is invalid. select.select('Option1', 'Option2') uses a non-existent method.
  3. Final Answer:

    select.select_by_visible_text('Option1'); select.select_by_visible_text('Option2') -> Option C
  4. Quick Check:

    Call select_by_visible_text separately for each option [OK]
Hint: Call select_by_visible_text once per option, not with a list [OK]
Common Mistakes:
  • Passing a list to select_by_visible_text
  • Using non-existent methods like select()
  • Trying to select multiple indexes with a list
3. Given the following code snippet, what will be the output of print([option.text for option in select.all_selected_options])?
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element(By.ID, 'fruits'))
select.select_by_visible_text('Apple')
select.select_by_visible_text('Banana')
select.deselect_by_visible_text('Apple')
medium
A. ['Apple', 'Banana']
B. ['Apple']
C. []
D. ['Banana']

Solution

  1. Step 1: Trace the selection and deselection steps

    First, 'Apple' and 'Banana' are selected. Then 'Apple' is deselected, leaving only 'Banana' selected.
  2. Step 2: Understand what all_selected_options returns

    It returns a list of currently selected options, so after deselecting 'Apple', only 'Banana' remains.
  3. Final Answer:

    ['Banana'] -> Option D
  4. Quick Check:

    Deselect removes 'Apple', so only 'Banana' remains [OK]
Hint: Deselect removes option; check selected list after deselect [OK]
Common Mistakes:
  • Assuming deselect_by_visible_text does not remove selection
  • Expecting all_selected_options to include deselected items
  • Confusing select_by_visible_text with deselect
4. What is wrong with the following code snippet for selecting multiple options in a multi-select dropdown?
select = Select(driver.find_element(By.ID, 'colors'))
select.select_by_index(1, 2)
medium
A. select_by_index does not accept multiple arguments
B. The element with ID 'colors' is not found
C. select_by_index only works with visible text
D. select_by_index requires a list as argument

Solution

  1. Step 1: Check method signature of select_by_index

    The select_by_index method accepts a single integer index, not multiple arguments.
  2. Step 2: Identify the error in argument usage

    Passing two arguments (1, 2) causes a TypeError because the method expects only one index at a time.
  3. Final Answer:

    select_by_index does not accept multiple arguments -> Option A
  4. Quick Check:

    select_by_index takes one index, not multiple [OK]
Hint: select_by_index accepts only one index at a time [OK]
Common Mistakes:
  • Passing multiple indexes as separate arguments
  • Confusing select_by_index with a method that accepts lists
  • Assuming select_by_index works with visible text
5. You want to select all options in a multi-select dropdown and then deselect only the options that contain the word 'Red'. Which Selenium Python code snippet correctly achieves this?
hard
A. for option in select.options: select.select_by_visible_text(option.text) for option in select.all_selected_options: if 'Red' in option.text: select.deselect_by_visible_text(option.text)
B. select.select_all() select.deselect_by_visible_text('Red')
C. select.select_by_visible_text('Red') select.deselect_all()
D. for option in select.options: if 'Red' not in option.text: select.select_by_visible_text(option.text)

Solution

  1. Step 1: Select all options in the dropdown

    Loop through all options and select each by visible text to ensure all are selected.
  2. Step 2: Deselect options containing 'Red'

    Loop through all selected options and deselect those whose text contains 'Red'.
  3. Step 3: Verify logic correctness

    for option in select.options: select.select_by_visible_text(option.text) for option in select.all_selected_options: if 'Red' in option.text: select.deselect_by_visible_text(option.text) correctly selects all, then deselects only 'Red' options. select.select_all() select.deselect_by_visible_text('Red') uses a non-existent select_all method. select.select_by_visible_text('Red') select.deselect_all() selects only 'Red' and then deselects all, which is incorrect. for option in select.options: if 'Red' not in option.text: select.select_by_visible_text(option.text) selects only non-'Red' options, not all first.
  4. Final Answer:

    for option in select.options: select.select_by_visible_text(option.text) for option in select.all_selected_options: if 'Red' in option.text: select.deselect_by_visible_text(option.text) -> Option A
  5. Quick Check:

    Select all first, then deselect 'Red' options [OK]
Hint: Select all options first, then deselect by condition [OK]
Common Mistakes:
  • Using non-existent select_all method
  • Selecting only 'Red' options instead of all
  • Deselecting all options instead of conditional ones
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