Selenium 特殊控件操作与 ActionChains 实践详解
1. 下拉框单选操作
(a) 使用 Selenium Select
类(标准 HTML <select>
标签)
Selenium 提供了内置的 Select
类用于操作标准下拉框,这种方式简单且直观。
from selenium.webdriver.support.ui import Select # 定位下拉框 dropdown = Select(driver.find_element("id", "dropdown_id")) # 通过以下三种方式选择单个选项 dropdown.select_by_visible_text("Option Text") # 根据选项文本选择 dropdown.select_by_value("option_value") # 根据选项的 value 属性选择 dropdown.select_by_index(2) # 根据选项的索引(从 0 开始)选择 # 验证选择 assert dropdown.first_selected_option.text == "Option Text"
(b) 自定义下拉框操作(非 <select>
元素)
对于一些自定义的下拉框(如通过 <div>
或 <ul>
实现),需通过点击元素来实现。
from selenium.webdriver.common.action_chains import ActionChains # 点击下拉框以显示选项 dropdown = driver.find_element("xpath", "//div[@class='dropdown']") ActionChains(driver).click(dropdown).perform() # 选择指定选项 option = driver.find_element("xpath", "//li[text()='Option Text']") ActionChains(driver).click(option).perform()
2. 下拉框多选操作
多选下拉框允许选择多个选项,以下是多种实现方式:
(a) 标准多选框(带 <select multiple>
标签)
使用 Select
类的多选功能:
from selenium.webdriver.support.ui import Select # 定位多选框 multi_select = Select(driver.find_element("id", "multi_select_id")) # 选择多个选项 multi_select.select_by_visible_text("Option 1") multi_select.select_by_visible_text("Option 2") # 验证已选项 selected_options = [option.text for option in multi_select.all_selected_options] assert "Option 1" in selected_options and "Option 2" in selected_options
取消选择:
# 取消某个选项 multi_select.deselect_by_visible_text("Option 1") # 取消所有选项 multi_select.deselect_all()
(b) 自定义多选框
对于通过自定义元素实现的多选框,通常需要结合按键操作(如 Ctrl
键)或单独点击多个选项。
方式 1:逐个点击选项
# 定位并点击每个选项 options = driver.find_elements("xpath", "//ul[@class='multi-select']/li") for option in options: if option.text in ["Option 1", "Option 2"]: ActionChains(driver).click(option).perform()
方式 2:使用键盘操作(按住 Ctrl 键)
from selenium.webdriver.common.keys import Keys # 定位多个选项 option1 = driver.find_element("xpath", "//li[text()='Option 1']") option2 = driver.find_element("xpath", "//li[text()='Option 2']") # 使用 Ctrl 键选择多个选项 ActionChains(driver).key_down(Keys.CONTROL).click(option1).click(option2).key_up(Keys.CONTROL).perform()
3. 时间控件操作(多种实现方式)
(a) 使用日期选择器点击指定日期
常见的时间控件通过点击显示的日历来选择日期。
# 打开时间控件 date_picker = driver.find_element("id", "date_picker_id") ActionChains(driver).click(date_picker).perform() # 选择具体日期 specific_date = driver.find_element("xpath", "//td[@data-date='2025-01-01']") ActionChains(driver).click(specific_date).perform()
(b) 输入日期字符串(通过输入框)
某些时间控件允许直接输入日期。
# 定位时间输入框 date_input = driver.find_element("id", "date_input") # 输入日期并提交 date_input.clear() date_input.send_keys("2025-01-01") date_input.send_keys(Keys.ENTER)
(c) 滑动时间控件(滑块式时间选择)
对于带滑块的时间选择控件,使用 drag_and_drop_by_offset
。
# 定位滑块 slider = driver.find_element("id", "time_slider") # 拖动滑块 ActionChains(driver).drag_and_drop_by_offset(slider, 50, 0).perform()
4. ActionChains 的详细应用场景
ActionChains
是 Selenium 处理复杂交互的核心工具。以下是针对不同场景的使用说明:
(a) 鼠标操作
- 单击和双击:
# 单击 element = driver.find_element("id", "clickable_element") ActionChains(driver).click(element).perform() # 双击 ActionChains(driver).double_click(element).perform()
- 右键点击:
# 右键点击 ActionChains(driver).context_click(element).perform()
- 悬停操作:
# 鼠标悬停 hover_element = driver.find_element("id", "hoverable_element") ActionChains(driver).move_to_element(hover_element).perform()
(b) 键盘操作
- 组合按键:
from selenium.webdriver.common.keys import Keys # 按住 Shift 键并输入文本 input_box = driver.find_element("id", "input_box") ActionChains(driver).key_down(Keys.SHIFT).send_keys_to_element(input_box, "text").key_up(Keys.SHIFT).perform()
- 快捷键操作:
# Ctrl + A 全选 input_box = driver.find_element("id", "input_box") ActionChains(driver).click(input_box).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()
(c) 拖放操作
- 基本拖放:
source = driver.find_element("id", "drag_source") target = driver.find_element("id", "drop_target") ActionChains(driver).drag_and_drop(source, target).perform()
- 拖放到指定偏移位置:
ActionChains(driver).drag_and_drop_by_offset(source, 100, 0).perform()
通过结合以上不同方式,可以实现从简单到复杂的自动化交互,满足各种 UI 测试场景的需求。