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 测试场景的需求。

相关推荐
niuniu_66621 小时前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试
suimeng61 天前
ChromeDriver的常用方法
java·selenium
niuniu_6662 天前
Selenium 性能测试指南
selenium·测试工具·单元测试·测试·安全性测试
莓事哒2 天前
selenium和pytessarct提取古诗文网的验证码(python爬虫)
爬虫·python·selenium·测试工具·pycharm
suimeng62 天前
基本元素定位(findElement方法)
java·selenium
mywpython2 天前
mac 最新的chrome版本配置selenium的方式
chrome·python·selenium·macos
软件测试曦曦2 天前
如何使用Python自动化测试工具Selenium进行网页自动化?
自动化测试·软件测试·python·功能测试·测试工具·程序人生·自动化
freejackman2 天前
Selenium框架——Web自动化测试
python·selenium·测试
互联网杂货铺2 天前
黑盒测试、白盒测试、集成测试和系统测试的区别与联系
自动化测试·软件测试·python·功能测试·测试工具·单元测试·集成测试
Feng.Lee2 天前
聊一聊缓存如何进行测试
功能测试·测试工具·缓存