Selenium之下拉框操作详解

2023-11-11

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

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 单选

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

如图:

 代码:

from selenium.webdriver.support.select import Select


# 打开Chrome浏览器
driver = webdriver.Chrome("../login/chromedriver.exe")

# 浏览器访问本地html地址
driver.get("file:///D:/ac/select.html")

# 根据select下拉框的id定位
select = driver.find_element_by_id("traffic")

# 获取select的所有选项
options_list = Select(select).options

# 循环把select所有选项读取出来
for option in options_list:
    print(option.text)  # 打印每个选项的文本值

time.sleep(1)
# 选中索引值为1的选项"地铁"(index从0开始)
Select(select).select_by_index(1)

time.sleep(1)
# 选中标签的value=train选项"火车"
Select(select).select_by_value("train")

time.sleep(1)
# 选中文本名称为"轻轨"选项
Select(select).select_by_visible_text("轻轨")

# 获取当前选中的下拉框中的选项
first = Select(select).first_selected_option.text
print("当前选中的下拉框:", first)

Select 多选

如图:

 代码:

from selenium.webdriver.support.select import Select


# 打开Chrome浏览器
driver = webdriver.Chrome("../login/chromedriver.exe")

# 浏览器访问本地html地址
driver.get("file:///D:/ac/select.html")

# 根据select下拉框的id定位
select = driver.find_element_by_id("discipline")

time.sleep(1)
# 选中索引值为1的选项"语文"
Select(select).select_by_index(1)

time.sleep(1)
# 选中索引值为4的选项"物理"
Select(select).select_by_index(4)

time.sleep(1)
# 选中索引值为5的选项"生物"
Select(select).select_by_index(5)

time.sleep(1)
# 选中标签的value=English的选项"英语"
Select(select).select_by_value("English")

time.sleep(1)
# 选中文本名称为"数学"选项
Select(select).select_by_visible_text("数学")

# 获取所有选中的选项
options = Select(select).all_selected_options
for option in options:
    print(option.text)  # 打印选项的文本值

time.sleep(1)
# 取消选中标签的value=organism的选项"生物"
Select(select).deselect_by_value("organism")

time.sleep(1)
# 取消选中文本名称为"语文"选项
Select(select).deselect_by_visible_text("语文")

time.sleep(1)
# 取消选中索引值为4的选项"物理"
Select(select).deselect_by_index(4)

time.sleep(1)
# 取消选中所有的选项
Select(select).deselect_all()

select 下拉框(隐藏)

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

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

 代码:

from selenium import webdriver


# 打开Chrome浏览器
driver = webdriver.Chrome("../login/chromedriver.exe")

# 设置全局等待时间,最大超时时间为10秒
driver.implicitly_wait(10)

# 浏览器最大化
driver.maximize_window()

# 打开禅道的地址
driver.get("http://127.0.0.1/zentao")

# 根据登录页面的id定位用户名输入框并输入用户名
driver.find_element_by_id("account").send_keys("admin")

# 根据登录页面的name定位密码输入框并输入密码
driver.find_element_by_name("password").send_keys("123456")

# 根据id定位登录按钮,并点击
driver.find_element_by_id("submit").click()

# 根据超文本连接的文本"测试"定位并点击
driver.find_element_by_link_text("测试").click()

# 根据xpath定位"Bug"并点击
driver.find_element_by_xpath("//*[@id='subNavbar']/ul/li[1]/a").click()

# 根据css定位"+提Bug"并点击
driver.find_element_by_css_selector(".btn-toolbar.pull-right > .btn.btn-primary").click()

# 根据id定位到"操作系统"的select下拉框
sel = driver.find_element_by_id("os")

# 根据下拉框中选项的index选择第三个选项
Select(sel).select_by_index(2)

执行结果如下:

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

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: Element is not currently visible and may not be manipulated
  (Session info: chrome=111.0.5563.146)

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

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

from selenium import webdriver


# 打开Chrome浏览器
driver = webdriver.Chrome("../login/chromedriver.exe")

# 设置全局等待时间,最大超时时间为10秒
driver.implicitly_wait(10)

# 浏览器最大化
driver.maximize_window()

# 打开禅道的地址
driver.get("http://127.0.0.1/zentao")

# 根据登录页面的id定位用户名输入框并输入用户名
driver.find_element_by_id("account").send_keys("admin")

# 根据登录页面的name定位密码输入框并输入密码
driver.find_element_by_name("password").send_keys("123456")

# 根据id定位登录按钮,并点击
driver.find_element_by_id("submit").click()

# 根据超文本连接的文本"测试"定位并点击
driver.find_element_by_link_text("测试").click()

# 根据xpath定位"Bug"并点击
driver.find_element_by_xpath("//*[@id='subNavbar']/ul/li[1]/a").click()

# 根据css定位"+提Bug"并点击
driver.find_element_by_css_selector(".btn-toolbar.pull-right > .btn.btn-primary").click()

# 根据id定位到"操作系统"的select下拉框
# sel = driver.find_element_by_id("os")
#
# # 根据下拉框中选项的index选择第三个选项
# Select(sel).select_by_index(2)

# 1、根据css定位查找下拉框旁边的按钮
# driver.find_element_by_css_selector("#os_chosen > a > div:nth-child(2)").click()

# 2、根据css定位查找下拉列表的输入框(点击输入框后html中才会有所有下拉选项的元素)
driver.find_element_by_css_selector(" #os_chosen > a > span").click()

# 根据其中要选择的选项使用css定位,点击后显示在下拉框的输入框中
driver.find_element_by_css_selector("#os_chosen > div > ul > li:nth-child(2)").click()

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

在这里插入图片描述

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

软件测试技术交流群社:786229024(里面还有工作内推机会,毕竟我们是关系社会。)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

面试文档获取方式:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium之下拉框操作详解 的相关文章

  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • C# 介绍、应用领域、入门、语法、输出和注释详解

    什么是 C C 发音为 C Sharp 是一种由 Microsoft 创建的面向对象的编程语言 运行在 NET Framework 上 源于 C 家族 与流行的语言如 C 和 Java 相近 首个版本发布于 2002 年 而最新版本 C 1
  • Go 语言运算符详解:加法、算术、赋值、比较、逻辑和位运算符全面解析

    运算符用于对变量和值执行操作 加号运算符 将两个值相加 如下面的示例所示 示例代码 package main import fmt func main var a 15 25 fmt Println a 尽管加号运算符通常用于将两个值相加
  • 软件测试|Pydantic处理时间类型数据

    简介 我们之前介绍过使用 pydantic 验证数据 比如校验数据的格式等 但是在我们的日常工作中 还有一种数据是需要我们验证的 比如时间数据 时间数据不同于字符串 列表等数据 与他们的验证不一样 本文就来为大家介绍一下 pydantic
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 《Spring 测试指南》:JPA、MockMvc 和 @SpringBootTest 详解

    测试 Spring 提供了一组测试工具 可以轻松地测试 Spring 应用程序的各个组件 包括控制器 服务 存储库和其他组件 它具有丰富的测试注释 实用程序类和其他功能 以帮助进行单元测试 集成测试等 JPA 测试 Spring JPA J
  • 深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析

    Python MongoDB 排序 对结果进行排序 使用 sort 方法对结果进行升序或降序排序 sort 方法接受一个参数用于 字段名 一个参数用于 方向 升序是默认方向 示例 按名称按字母顺序对结果进行排序 import pymongo
  • 深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析

    在 MongoDB 中 我们使用 find 和 find one 方法来在集合中查找数据 就像在MySQL数据库中使用 SELECT 语句来在表中查找数据一样 查找单个文档 要从MongoDB的集合中选择数据 我们可以使用 find one
  • Python 中多态性的示例和类的继承多态性

    单词 多态 意味着 多种形式 在编程中 它指的是具有相同名称的方法 函数 操作符 可以在许多不同的对象或类上执行 函数多态性 一个示例是 Python 中的 len 函数 它可以用于不同的对象 字符串 对于字符串 len 返回字符的数量 示
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 一篇文章带你了解Python常用自动化测试框架——Pytest

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯负载最终请求数

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 如何打赢稳定性之战?

    文章目录 前言 为什么总会出现问题呢 如何证明你的稳定性做的有效果 既是持久战 也是防御战 1 提前建筑好防御工事 2 以攻为守 3 找外部支援和配合 前言 随着23年年末期间 各大厂争先恐后的出现的各种线上
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • 15:00面试,15:06就出来了,问的问题有点变态。。。

    从小厂出来 没想到在另一家公司又寄了 到这家公司开始上班 加班是每天必不可少的 看在钱给的比较多的份上 就不太计较了 没想到9月一纸通知 所有人不准加班 加班费不仅没有了 薪资还要降40 这下搞的饭都吃不起了 还在有个朋友内推我去了一家互联
  • 一文让你快速写出高效的软件测试用例

    前言 编写测试用例的目的就是确保测试过程全面高效 有据可查 但要编写出高效的测试用例 需要搞清楚什么是测试用例 以及如何编写出高效的测试用例 接下来将从以下几个部分来进行展开 1 什么是测试用例 2 如何编写测试用例 3 软件测试学习资源分
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 20年通过校招进入广州某软件公司 干了接近3年的 功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的功能测试 已经让我变得不思进取 谈了2年的女朋
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐

  • mysql查询练习(三)

    31 查询成绩比该课程平均成绩低的同学的成绩表 mysql gt select from score a where degree lt select avg degree from score b where a cno b cno sn
  • 查看linux系统版本命令

    一 查看内核版本命令 1 root SOR SYS cat proc version Linux version 2 6 18 238 el5 mockbuild x86 012 build bos redhat com gcc versi
  • Robot Framework完整流程学习--分层思想

    一 环境搭建 网上有很多的教程 这里就不多讲了 二 RIDE的界面认识 这里只介绍几个重要常用的功能 其他相信自己都能理解 1 Search Keywords F5 搜索关键字 2 Content Assistance 内容助手 3 Vie
  • java 多线程 总结一

    首先讲一下进程和线程的区别 进程 每个进程都有独立的代码和数据空间 进程上下文 进程间的切换会有较大的开销 一个进程包含1 n个线程 线程 同一类线程共享代码和数据空间 每个线程有独立的运行栈和程序计数器 PC 线程切换开销小 线程和进程一
  • nmap常规使用和参数超细详解 -- 小黑liux武器库详解<宝藏文>

    namp非常强大的主机发现和端口扫描工具 这是web渗透常用的工具 包含四项基本功能 主机发现 端口扫描 版本侦测 操作系统侦测 目录 常规使用 单体拳法 组合拳 参数详解 主机发现 扫描技术 服务版本探测 操作系统检测 防火墙 IDS规避
  • opencv +数字识别

    现在很多场景需要使用的数字识别 比如银行卡识别 以及车牌识别等 在AI领域有很多图像识别算法 大多是居于opencv 或者谷歌开源的tesseract 识别 由于公司业务需要 需要开发一个客户端程序 同时需要在xp这种老古董的机子上运行 故
  • protoBuffer的下载以及使用①

    这里写了一个简单的示例检测proto是否可以使用 使用protoBuf需要提供以下 protobuf java 2 6 1 sources jar protoc 2 6 1 win32 zip 这两个文件我已经添加了附件 当然也可去谷歌官网
  • mysql报错合集

    1 Too many connections 报错 quickBI上报错 数据源执行SQL失败 INTERNAL java sql SQLException com mysql jdbc exceptions jdbc4 MySQLNonT
  • java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigD

    解决 将int类型转成BigDecimal类型就可以了 filtrationList add new Filtration MatchType EQ BigDecimal valueOf 0 fisRemove java lang Clas
  • 东北大学acm第五周周赛

    include
  • Resources.getResourceAsStream用法

    Resources com ibatis common resource Resources 类为从类路径中加载资源 提供了易于使用的方法 处理 ClassLoader 是一项 富于挑战的工作 尤其是应用服务器 容器的情况下 Resourc
  • mmdetection的VOC数据集训练、测试、保存(测试图片)

    mmdetection训练 测试总结 1 数据集格式 voc数据集 在 mmdetection data VOCdekit 上传数据 改名为VOC2007 其中包含JPEGImages Annotations ImageSets等 2 代码
  • 【vue3】监听路由的写法以及路由更新但是页面内容不更新的解决方案

    以下是vue3使用watch监听路由的写法 watch gt router currentRoute value newValue any gt 此处写监听路由后要执行的事情 if newValue fullPath manage rack
  • 2019年第十届蓝桥杯程序设计大赛国赛C++大学B组题解

    目录 A 平方序列 B 质数拆分 D 求值 E 路径计数 F 最优包含 G 排列数 H 解谜游戏 I 第八大奇迹 A 平方序列 题目解析 题意很直白 我们可以暴力枚举x y 2019
  • 机械革命开启Hyper-V安装Docker无限蓝屏(已解决)

    安装Docker时会蓝屏 安装Docker时会蓝屏 起初以为是docker 系统问题 后来经过仔细的检查 发现是只要开启虚拟化就会蓝屏 再检查好像硬件虚拟化有点问题 一番查找之后方知是bios的问题 CODE01需要升级到1 07版本 官方
  • 如何实现一个组件封装?

    问题网址 http bbs daxiangclass com thread 271 htm js前端组件的封装方法 定义一个类 类中增加一个方法 body中定义一个dom节点 脚本中把dom节点和类定义结合起来 实现特定的组件功能 vue组
  • Python爬取淘宝商品

    爬取淘宝商品信息 一个小菜鸡 用了十四个小时写了个爬虫 时间是有点长 但我心里美滋滋啊 记录下过程 也是第一次写博客排版什么的就凑合吧 主要用了selenium BeautifulSoup库 初始化 在十秒内页面加载完毕 调用seleniu
  • matlab函数大全

    转载方法 https blog csdn net yanmantian article details 53256765 本文转载自http www cnblogs com gtts archive 2011 05 20 2052339 h
  • cocos2d-x中有一个JniHelper类详细使用

    主体思路 通过JNI获取java虚拟机 再获取当前程序的JNI环境 通过JNI环境获取需要调用的java类信息 再获取需要调用的java类中的函数信息 再通过JNI环境调用 使用类信息 函数信息 调用对应的java函数 看起来好像有点复杂
  • Selenium之下拉框操作详解

    前言 执行自动化测试过程中遇到下拉框 包含 单选 多选 如何定位到下拉框并选中某个选项 1 下拉框的分类 select 标签 非 select 标签 2 Select 下拉列表处理 针对 select 标签的下拉列表 Selenium 提供