Bird
Raised Fist0
Selenium Pythontesting~5 mins

Multi-select handling in Selenium Python

Choose your learning style10 modes available
Introduction

Multi-select handling lets you choose many options from a list on a webpage. It helps test if the website works well when users pick multiple items.

Testing a form where users can select multiple hobbies or interests.
Verifying a filter on a shopping site that allows selecting several brands at once.
Checking if a survey lets users pick more than one answer.
Validating a settings page where multiple notification types can be enabled.
Ensuring a multi-select dropdown correctly shows all chosen options.
Syntax
Selenium Python
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By

select = Select(driver.find_element(By.ID, 'element_id'))
select.select_by_visible_text('Option Text')
select.select_by_value('option_value')
select.select_by_index(index)

Use Select class to work with multi-select dropdowns.

Make sure the HTML <select> element has the multiple attribute.

Examples
Selects the option that shows 'Apple' to the user.
Selenium Python
select.select_by_visible_text('Apple')
Selects the option with the value attribute 'banana'.
Selenium Python
select.select_by_value('banana')
Selects the third option in the list (index starts at 0).
Selenium Python
select.select_by_index(2)
Deselects all selected options in a multi-select list.
Selenium Python
select.deselect_all()
Sample Program

This script opens a test page with a multi-select list of car brands. It selects 'Volvo' and 'Opel', prints the selected options, then deselects all and prints again to confirm.

Selenium Python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time

# Setup driver (make sure chromedriver is in PATH)
driver = webdriver.Chrome()
driver.get('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_multiple')

# Switch to iframe where the multi-select is
driver.switch_to.frame('iframeResult')

# Locate multi-select element
select_element = driver.find_element(By.NAME, 'cars')
select = Select(select_element)

# Select multiple options
select.select_by_visible_text('Volvo')
select.select_by_visible_text('Opel')

# Verify selections
selected_options = [opt.text for opt in select.all_selected_options]
print('Selected options:', selected_options)

# Deselect all
select.deselect_all()

# Verify deselection
selected_after_deselect = [opt.text for opt in select.all_selected_options]
print('Selected after deselect:', selected_after_deselect)

time.sleep(2)
driver.quit()
OutputSuccess
Important Notes

Always check if the select element supports multiple selections by verifying the multiple attribute.

Use deselect_all() only on multi-select elements; it will cause an error on single-select dropdowns.

Switch to the correct iframe if the multi-select is inside one before locating the element.

Summary

Multi-select handling lets you pick many options from a list in tests.

Use Selenium's Select class with methods like select_by_visible_text and deselect_all.

Always confirm the element supports multiple selections before using multi-select methods.

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