Selenium 特殊控件操作与 ActionChains 实践详解

devtools/2025/1/8 6:41:17/

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


http://www.ppmy.cn/devtools/147869.html

相关文章

图扑 HT 引擎 × 3DGS 高斯泼溅

3D 高斯泼溅(3D Gaussian Splatting&#xff0c;又称 3D 高斯溅射或 3D 高斯飞溅)作为三维场景表示和渲染领域的重要突破&#xff0c;正在重新定义三维重建的可能性。它利用辐射场渲染技术&#xff0c;使用 3D 高斯点而不是传统的三角面来表达场景&#xff0c;不仅实现了高效的…

社群团购平台的运营模式革新:以开源AI智能名片链动2+1模式商城小程序为例

摘要&#xff1a; 社群团购作为社交电商的一种重要形式&#xff0c;近年来在市场上展现出强大的生命力。然而&#xff0c;很多人对社群团购存在误解&#xff0c;认为其仅仅是拉人头卖货的简单模式。本文旨在探讨社群团购平台的运营模式&#xff0c;特别是结合开源AI智能名片链…

深度剖析 DeepSeek V3 技术报告:架构创新与卓越性能表现

随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;各种大规模语言模型&#xff08;LLM&#xff09;层出不穷&#xff0c;DeepSeek V3 作为其中的一员&#xff0c;凭借其出色的性能表现和创新的架构设计&#xff0c;吸引了广泛关注。本文将通过对官方发布的 De…

昆仑万维大数据面试题及参考答案

请介绍一下 Flume 组件。 Flume 是一个分布式、可靠、高可用的海量日志采集、聚合和传输的系统。 从架构层面来看,它主要包含以下几个关键部分。首先是 Source,它是数据的收集端,能够接收多种不同来源的数据。比如,它可以从各种服务器的日志文件中读取数据,像 Web 服务器产…

C# 附加到进程中,发现断点不是实的断点

1、提示内容如下。 The breakpoint will not currently be hit. No symbols have been loaded for this document. 2、解决办法 Properties -> Debug-> Enable Debuggers: Check "Enable native code debugging"

【Seed-Labs 2.0】TCP/IP Attack Lab

说在前面 本实验的相关文件参见官网 TCP/IP Attack Lab 本实验建议在官方提供的虚拟机环境中进行&#xff0c;可以参考 SEED-labs-ubuntu 20.04 虚拟机环境搭建 Lab Environment Setup 使用docker拉取实验环境镜像。实验环境中有一台攻击者&#xff0c;和三台主机。 Task …

orm01

静态文件处理 静态文件&#xff1a;如&#xff1a;图片、音频、视频、css、js等静态文件的相关配置也在 项目名/项目名/settings.py 文件中进行配置 - 配置静态文件的访问路径STATIC_URL- 功能&#xff1a;通过哪个 url 地址找静态文件- 默认配置&#xff1a;STATIC_URL /sta…

Colyseus 的断线重连和心跳机制

Colyseus 的断线重连和心跳机制 Colyseus 是一个专注于实时多人游戏开发的 WebSocket 框架,支持客户端断线重连和心跳功能以保持连接稳定性。这些功能对于多人游戏或实时协作应用至关重要,确保即使在网络波动时,玩家或用户的状态不会丢失。 1. 断线重连机制 原理 Colyseus…