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).perfo

(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()

拖放到指定偏移位置:

 ActionChains(driver).drag_and_drop_by_offset(source, 100, 0).perform()

通过结合以上不同方式,可以实现从简单到复杂的自动化交互,满足各种 UI 测试场景的需求。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐