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

打印 上一主题 下一主题

主题 782|帖子 782|积分 2346

1. 下拉框单选操作

(a) 使用 Selenium Select 类(标准 HTML <select> 标签)

Selenium 提供了内置的 Select 类用于操作标准下拉框,这种方式简单且直观。
  1. from selenium.webdriver.support.ui import Select
  2. # 定位下拉框
  3. dropdown = Select(driver.find_element("id", "dropdown_id"))
  4. # 通过以下三种方式选择单个选项
  5. dropdown.select_by_visible_text("Option Text")  # 根据选项文本选择
  6. dropdown.select_by_value("option_value")        # 根据选项的 value 属性选择
  7. dropdown.select_by_index(2)                     # 根据选项的索引(从 0 开始)选择
  8. # 验证选择
  9. assert dropdown.first_selected_option.text == "Option Text"
复制代码
(b) 自定义下拉框操作(非 <select> 元素)

对于一些自定义的下拉框(如通过 <div> 或 <ul> 实现),需通过点击元向来实现。
  1. from selenium.webdriver.common.action_chains import ActionChains
  2. # 点击下拉框以显示选项
  3. dropdown = driver.find_element("xpath", "//div[@class='dropdown']")
  4. ActionChains(driver).click(dropdown).perform()
  5. # 选择指定选项
  6. option = driver.find_element("xpath", "//li[text()='Option Text']")
  7. ActionChains(driver).click(option).perform()
复制代码

2. 下拉框多选操作

多选下拉框允许选择多个选项,以下是多种实现方式:
(a) 标准多选框(带 <select multiple> 标签)

使用 Select 类的多选功能:
  1. from selenium.webdriver.support.ui import Select
  2. # 定位多选框
  3. multi_select = Select(driver.find_element("id", "multi_select_id"))
  4. # 选择多个选项
  5. multi_select.select_by_visible_text("Option 1")
  6. multi_select.select_by_visible_text("Option 2")
  7. # 验证已选项
  8. selected_options = [option.text for option in multi_select.all_selected_options]
  9. assert "Option 1" in selected_options and "Option 2" in selected_options
复制代码
取消选择:
  1. # 取消某个选项
  2. multi_select.deselect_by_visible_text("Option 1")
  3. # 取消所有选项
  4. multi_select.deselect_all()
复制代码
(b) 自定义多选框

对于通过自定义元素实现的多选框,通常需要结合按键操作(如 Ctrl 键)或单独点击多个选项。
方式 1:逐个点击选项

  1. # 定位并点击每个选项
  2. options = driver.find_elements("xpath", "//ul[@class='multi-select']/li")
  3. for option in options:
  4.     if option.text in ["Option 1", "Option 2"]:
  5.         ActionChains(driver).click(option).perform()
复制代码
方式 2:使用键盘操作(按住 Ctrl 键)

  1. from selenium.webdriver.common.keys import Keys
  2. # 定位多个选项
  3. option1 = driver.find_element("xpath", "//li[text()='Option 1']")
  4. option2 = driver.find_element("xpath", "//li[text()='Option 2']")
  5. # 使用 Ctrl 键选择多个选项
  6. ActionChains(driver).key_down(Keys.CONTROL).click(option1).click(option2).key_up(Keys.CONTROL).perform()
复制代码

3. 时间控件操作(多种实现方式)

(a) 使用日期选择器点击指定日期

常见的时间控件通过点击显示的日向来选择日期。
  1. # 打开时间控件
  2. date_picker = driver.find_element("id", "date_picker_id")
  3. ActionChains(driver).click(date_picker).perform()
  4. # 选择具体日期
  5. specific_date = driver.find_element("xpath", "//td[@data-date='2025-01-01']")
  6. ActionChains(driver).click(specific_date).perform()
复制代码
(b) 输入日期字符串(通过输入框)

某些时间控件允许直接输入日期。
  1. # 定位时间输入框
  2. date_input = driver.find_element("id", "date_input")
  3. # 输入日期并提交
  4. date_input.clear()
  5. date_input.send_keys("2025-01-01")
  6. date_input.send_keys(Keys.ENTER)
复制代码
(c) 滑动时间控件(滑块式时间选择)

对于带滑块的时间选择控件,使用 drag_and_drop_by_offset。
  1. # 定位滑块
  2. slider = driver.find_element("id", "time_slider")
  3. # 拖动滑块
  4. ActionChains(driver).drag_and_drop_by_offset(slider, 50, 0).perform()
复制代码

4. ActionChains 的详细应用场景

ActionChains 是 Selenium 处理复杂交互的核心工具。以下是针对不同场景的使用说明:
(a) 鼠标操作



  • 单击和双击:
  1. # 单击
  2. element = driver.find_element("id", "clickable_element")
  3. ActionChains(driver).click(element).perform()
  4. # 双击
  5. ActionChains(driver).double_click(element).perform()
复制代码


  • 右键点击:
  1. # 右键点击
  2. ActionChains(driver).context_click(element).perform()
复制代码


  • 悬停操作:
  1. # 鼠标悬停
  2. hover_element = driver.find_element("id", "hoverable_element")
  3. ActionChains(driver).move_to_element(hover_element).perform()
复制代码
(b) 键盘操作



  • 组合按键:
  1. from selenium.webdriver.common.keys import Keys
  2. # 按住 Shift 键并输入文本
  3. input_box = driver.find_element("id", "input_box")
  4. ActionChains(driver).key_down(Keys.SHIFT).send_keys_to_element(input_box, "text").key_up(Keys.SHIFT).perform()
复制代码


  • 快捷键操作:
  1. # Ctrl + A 全选
  2. input_box = driver.find_element("id", "input_box")
  3. ActionChains(driver).click(input_box).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()
复制代码
(c) 拖放操作



  • 基本拖放:
  1. source = driver.find_element("id", "drag_source")
  2. target = driver.find_element("id", "drop_target")
  3. ActionChains(driver).drag_and_drop(source, target).perform()
复制代码


  • 拖放到指定偏移位置:
  1. ActionChains(driver).drag_and_drop_by_offset(source, 100, 0).perform()
复制代码
通过结合以上不同方式,可以实现从简单到复杂的自动化交互,满足各种 UI 测试场景的需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表