当前位置: 首页 > article >正文

Selenium之下拉框操作详解

前言:执行自动化测试过程中遇到下拉框,包含:单选、多选,如何定位到下拉框并选中某个选项?

1 下拉框的分类

  • select 标签

  • 非 select 标签

2 Select 下拉列表处理

针对 select 标签的下拉列表,Selenium 提供了 Select 类进行操作:

from selenium.webdriver.support.select import Select

下面这种方式一样可以使用 Select,原理是 ui 中又去调用的 Select 类:

from selenium.webdriver.support.ui import Select

Select 方法列表

Select 单选

针对单选的下拉框,每次仅能选择一个选项,可以在不同的选项中切换。

如图:

 代码:

 
  1. from selenium.webdriver.support.select import Select

  2. # 打开Chrome浏览器

  3. driver = webdriver.Chrome("../login/chromedriver.exe")

  4. # 浏览器访问本地html地址

  5. driver.get("file:///D:/ac/select.html")

  6. # 根据select下拉框的id定位

  7. select = driver.find_element_by_id("traffic")

  8. # 获取select的所有选项

  9. options_list = Select(select).options

  10. # 循环把select所有选项读取出来

  11. for option in options_list:

  12. print(option.text) # 打印每个选项的文本值

  13. time.sleep(1)

  14. # 选中索引值为1的选项"地铁"(index从0开始)

  15. Select(select).select_by_index(1)

  16. time.sleep(1)

  17. # 选中标签的value=train选项"火车"

  18. Select(select).select_by_value("train")

  19. time.sleep(1)

  20. # 选中文本名称为"轻轨"选项

  21. Select(select).select_by_visible_text("轻轨")

  22. # 获取当前选中的下拉框中的选项

  23. first = Select(select).first_selected_option.text

  24. print("当前选中的下拉框:", first)

Select 多选

如图:

 代码:

 
  1. from selenium.webdriver.support.select import Select

  2. # 打开Chrome浏览器

  3. driver = webdriver.Chrome("../login/chromedriver.exe")

  4. # 浏览器访问本地html地址

  5. driver.get("file:///D:/ac/select.html")

  6. # 根据select下拉框的id定位

  7. select = driver.find_element_by_id("discipline")

  8. time.sleep(1)

  9. # 选中索引值为1的选项"语文"

  10. Select(select).select_by_index(1)

  11. time.sleep(1)

  12. # 选中索引值为4的选项"物理"

  13. Select(select).select_by_index(4)

  14. time.sleep(1)

  15. # 选中索引值为5的选项"生物"

  16. Select(select).select_by_index(5)

  17. time.sleep(1)

  18. # 选中标签的value=English的选项"英语"

  19. Select(select).select_by_value("English")

  20. time.sleep(1)

  21. # 选中文本名称为"数学"选项

  22. Select(select).select_by_visible_text("数学")

  23. # 获取所有选中的选项

  24. options = Select(select).all_selected_options

  25. for option in options:

  26. print(option.text) # 打印选项的文本值

  27. time.sleep(1)

  28. # 取消选中标签的value=organism的选项"生物"

  29. Select(select).deselect_by_value("organism")

  30. time.sleep(1)

  31. # 取消选中文本名称为"语文"选项

  32. Select(select).deselect_by_visible_text("语文")

  33. time.sleep(1)

  34. # 取消选中索引值为4的选项"物理"

  35. Select(select).deselect_by_index(4)

  36. time.sleep(1)

  37. # 取消选中所有的选项

  38. Select(select).deselect_all()

select 下拉框(隐藏)

隐藏式的下拉框必须在点击了下拉框之后,才会把所有的可选项的元素显示在html中,如果采用常规的 select 方式无法定位,一般此种采用 ul + li 标签的方式开发的下拉框。

如下图所示:禅道的提交bug的"操作系统"下拉框,我们直接通过 select 的下拉框操作方式进行定位:

 代码:

 
  1. from selenium import webdriver

  2. # 打开Chrome浏览器

  3. driver = webdriver.Chrome("../login/chromedriver.exe")

  4. # 设置全局等待时间,最大超时时间为10秒

  5. driver.implicitly_wait(10)

  6. # 浏览器最大化

  7. driver.maximize_window()

  8. # 打开禅道的地址

  9. driver.get("http://127.0.0.1/zentao")

  10. # 根据登录页面的id定位用户名输入框并输入用户名

  11. driver.find_element_by_id("account").send_keys("admin")

  12. # 根据登录页面的name定位密码输入框并输入密码

  13. driver.find_element_by_name("password").send_keys("123456")

  14. # 根据id定位登录按钮,并点击

  15. driver.find_element_by_id("submit").click()

  16. # 根据超文本连接的文本"测试"定位并点击

  17. driver.find_element_by_link_text("测试").click()

  18. # 根据xpath定位"Bug"并点击

  19. driver.find_element_by_xpath("//*[@id='subNavbar']/ul/li[1]/a").click()

  20. # 根据css定位"+提Bug"并点击

  21. driver.find_element_by_css_selector(".btn-toolbar.pull-right > .btn.btn-primary").click()

  22. # 根据id定位到"操作系统"的select下拉框

  23. sel = driver.find_element_by_id("os")

  24. # 根据下拉框中选项的index选择第三个选项

  25. Select(sel).select_by_index(2)

执行结果如下:

元素当前不可见,不能被操作。

 
  1. selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: Element is not currently visible and may not be manipulated

  2. (Session info: chrome=111.0.5563.146)

而实际真正的元素必须要点击了页面的下拉框的箭头才能把所有下拉框中的选项显示出来,所以执行的过程中,就不能使用原始的 select 下拉框定位的方式去做。

此处使用方法,先定位下拉框的箭头或者整个输入框,点击之后,html页面的元素显示出来后使用常规的8大定位方式来进行定位其中一个选项,再执行点击的动作:

 
  1. from selenium import webdriver

  2. # 打开Chrome浏览器

  3. driver = webdriver.Chrome("../login/chromedriver.exe")

  4. # 设置全局等待时间,最大超时时间为10秒

  5. driver.implicitly_wait(10)

  6. # 浏览器最大化

  7. driver.maximize_window()

  8. # 打开禅道的地址

  9. driver.get("http://127.0.0.1/zentao")

  10. # 根据登录页面的id定位用户名输入框并输入用户名

  11. driver.find_element_by_id("account").send_keys("admin")

  12. # 根据登录页面的name定位密码输入框并输入密码

  13. driver.find_element_by_name("password").send_keys("123456")

  14. # 根据id定位登录按钮,并点击

  15. driver.find_element_by_id("submit").click()

  16. # 根据超文本连接的文本"测试"定位并点击

  17. driver.find_element_by_link_text("测试").click()

  18. # 根据xpath定位"Bug"并点击

  19. driver.find_element_by_xpath("//*[@id='subNavbar']/ul/li[1]/a").click()

  20. # 根据css定位"+提Bug"并点击

  21. driver.find_element_by_css_selector(".btn-toolbar.pull-right > .btn.btn-primary").click()

  22. # 根据id定位到"操作系统"的select下拉框

  23. # sel = driver.find_element_by_id("os")

  24. #

  25. # # 根据下拉框中选项的index选择第三个选项

  26. # Select(sel).select_by_index(2)

  27. # 1、根据css定位查找下拉框旁边的按钮

  28. # driver.find_element_by_css_selector("#os_chosen > a > div:nth-child(2)").click()

  29. # 2、根据css定位查找下拉列表的输入框(点击输入框后html中才会有所有下拉选项的元素)

  30. driver.find_element_by_css_selector(" #os_chosen > a > span").click()

  31. # 根据其中要选择的选项使用css定位,点击后显示在下拉框的输入框中

  32. driver.find_element_by_css_selector("#os_chosen > div > ul > li:nth-child(2)").click()

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

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


http://www.kler.cn/news/309299.html

相关文章:

  • MySQL5.7-虚拟列
  • Rust 所有权 借用与引用
  • Android 车联网——汽车模块介绍(附1)
  • 【SpringCloud】Spring Cloud 开发环境搭建与基础工程构建
  • TaskingAI实践(一)快速上手
  • 【Java】基础语法介绍
  • 【自动驾驶】决策规划算法 | 数学基础(三)直角坐标与自然坐标转换Ⅱ
  • 论文速递 | 基于MIC-ICEEMD-RIME-DHKELM的碳排放预测模型研究
  • Linux系统上搭建Vulhub靶场
  • OpenCV通过鼠标提前ROI(C++实现)
  • 电机纹波电流与PWM控制周期关系
  • Java并发常见面试题(上)
  • Rust GUI框架Tauri V1 入门
  • 【算法】滑动窗口—字符串的排列
  • 绕过CDN查找真实IP方法
  • Mybatis-plus复习篇
  • 【浏览器面试真题】sessionStorage和localStorage
  • 全新WordPress插件简化成功之路
  • 小红书治愈插画副业,猛猛涨粉上万+,每天只用5分钟
  • 联邦大模型Federated Large Language Model
  • OA项目之左侧菜单动态选项卡
  • 开发小程序
  • 微服务_入门2
  • 【重学 MySQL】二十五、等值连接vs非等值连接、自连接vs非自连接
  • Java中的OOM与SOF:详解内存溢出与栈溢出
  • 事务的四大特性
  • Day28_0.1基础学习MATLAB学习小技巧总结(28)——参数估计函数
  • 经典sql题(六)查找用户每月累积访问次数
  • Artcam中文版安装包+教程网盘资源下载
  • C语言深入理解指针(二)