Python + Selenium —— 下拉菜单处理!

传统的下拉菜单 Select 元素,由一个 Select + 一系列的 option 元素构成。

<select id="source" name="source"><option value="">--请选择--</option><option value="1001">网络营销</option><option value="1002">公开媒体</option><option value="1003">合作伙伴</option>…
</select>

对于下拉菜单,我们操作时是先点击下拉选项,再在展开的选项中点击一项来完成选择。

如果用 Selenium 模拟,就需要先点击 Select 元素,再点击 Option,就稍微麻烦了一些。我们可以通过两种方法来处理。

1. 直接通过 Xpath 点击选项

通过 Xpath 点击直接选项,可以不用点击下拉,一句代码完成操作。

以上面的局部 HTML 代码为例:

driver.find_element_by_xpath('//*[@id="source"]/option[@value="1002"]').click()

2. 使用 Select 类

使用 Xpath 虽然可行,但是稍微缺乏一些灵活性。

在 WebDriver 中专门提供了一个 Select 类来处理下拉菜单。

# 导入 Select 类
from selenium.webdriver.support.select import Select
# 找到下拉菜单元素
e = driver.find_element_by_id('source')
select = Select(e)
# 按文本选择
select.select_by_visible_text('合作伙伴')

Select 类中还提供了通过 option 索引选取、通过 value 值选取:

select.select_by_index(1)
select.select_by_value('1003')

由于我们经常使用 index 和 visible text (可见文本) 的方式选择选项。所以我们简单封装一下:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Selectdef select(driver, locator, option=0):e = Select(driver.find_element(*locator))# 如果选项为整数,则通过 index 选择if isinstance(option, int):e.select_by_index(option)# 如果选项为字符串,则通过 visible_text 选择elif isinstance(option, str):e.select_by_visible_text(option)else:raise ValueError('只能通过index或可见文本进行下拉选项选择!')# 使用
select(driver, (By.ID, 'source'), '合作伙伴')

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:自动化测试老司机 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.3 序列式容器-deque、stack、queue、heap、priority_queue

deque 3.1定义 std::deque&#xff08;双端队列&#xff09;是C标准模板库&#xff08;STL&#xff09;中的一种容器&#xff0c;表示双端队列数据结构。它提供了在两端高效地进行插入和删除操作的能力。与vector的连续线性空间类似&#xff0c;但有所不同&#xff0c;deque动…

基于ssm旅社客房收费管理系统+vue

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

STM32使用FlyMcu串口下载程序与STLink Utility下载程序

文章目录 前言软件链接一、FlyMcu串口下载程序原理优化手动修改跳线帽选项字节其他功能 二、STLink Utility下载程序下载程序选项字节固件更新 前言 本文主要讲解使用FlyMcu配合USART串口为STM32下载程序、使用STLink Utility配合STLink为STM32下载程序&#xff0c;以及这两个…

代码随想录算法训练营第62/63天| 503.下一个更大元素II、42. 接雨水、84.柱状图中最大的矩形

文章目录 503.下一个更大元素II思路代码 42. 接雨水思路代码 84.柱状图中最大的矩形思路代码 503.下一个更大元素II 题目链接&#xff1a;503.下一个更大元素II 文章讲解&#xff1a;代码随想录|503.下一个更大元素II 思路 和739. 每日温度 (opens new window)也几乎如出一辙&…

C++/数据结构:AVL树

目录 一、AVL树的概念 二、AVL树的实现 2.1节点定义 2.2节点插入 三、AVL树的旋转 3.1新节点插入较高左子树的左侧&#xff1a;右单旋 3.2新节点插入较高右子树的右侧&#xff1a;左单旋 3.3新节点插入较高左子树的右侧---左右&#xff1a;先左单旋再右单旋 3.4新节点插…

SLAM基础知识-卡尔曼滤波

前言&#xff1a; 在SLAM系统中&#xff0c;后端优化部分有两大流派。一派是基于马尔科夫性假设的滤波器方法&#xff0c;认为当前时刻的状态只与上一时刻的状态有关。另一派是非线性优化方法&#xff0c;认为当前时刻状态应该结合之前所有时刻的状态一起考虑。 卡尔曼滤波是…

SD NAND:为车载显示器注入智能与安全的心脏

SD NAND 在车载显示器的应用 在车载显示器上&#xff0c;SD NAND&#xff08;Secure Digital NAND&#xff09;可以有多种应用&#xff0c;其中一些可能包括&#xff1a; 导航数据存储&#xff1a; SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…

微服务day03-Nacos配置管理与Nacos集群搭建

一.Nacos配置管理 Nacos不仅可以作为注册中心&#xff0c;可以进行配置管理 1.1 统一配置管理 统一配置管理可以实现配置的热更新&#xff08;即不用重启当服务发生变更时也可以直接更新&#xff09; dataId格式&#xff1a;服务名-环境名.yaml&#xff0c;分组一般使用默认…

蓝桥杯备战刷题two(自用)

1.杨辉三角形 #include<iostream> using namespace std; #define ll long long const int N2e510; int a[N]; //1 0 0 0 0 0 0 //1 1 0 0 0 0 0 //1 2 1 0 0 0 0 //1 3 3 1 0 0 0 //1 4 6 4 1 0 0 //1 5 10 10 5 1 //前缀和思想 //第一列全为1,第二列为从0开始递增1的序…

信息检索(七):Transformer Memory as a Differentiable Search Index

Transformer Memory as a Differentiable Search Index 摘要1. 引言2. 相关工作3. 可微搜索索引3.1 索引策略3.1.1 索引方法3.1.2 文档表示策略 3.2 用于检索的 Docids 表示3.3 训练和优化 4. 实验4.1 基线4.2 实验结果 5. 结论参考资料 原文链接&#xff1a;https://proceedin…

Revit-二开之创建线性尺寸标注-(5)

创建线性尺寸标注 对应的Revit界面的按钮 线性尺寸标注源码 本篇文章实现的逻辑是从rvt文章中拾取一面墙,然后对墙添加再水平方向上的线性尺寸标注 protected override Result OnExecute(ExternalCommandData commandData, ref string message, ElementSet elements

LeetCode 刷题 [C++] 第55题.跳跃游戏

题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 题目分析 题目中…

2.1 mov、add和sub加减指令实操体验

汇编语言 1. mov操作 1.1 mov移动值 mov指令把右边的值移动到左边 mount c d:masm c: debug r ax 0034 r 073f:0100 mov ax,7t1.2 mov移动寄存器的值 把右边寄存器的值赋值给左边的寄存器 a 073f:0105 mov bx,axt1.3 mov高八位&#xff08;high&#xff09;和低八位&am…

设计模式——中介者模式(mediator pattern)

概述 如果在一个系统中对象之间的联系呈现为网状结构&#xff0c;如下图所示。对象之间存在大量的多对多联系&#xff0c;将导致系统非常复杂&#xff0c;这些对象既会影响别的对象&#xff0c;也会被别的对象所影响&#xff0c;这些对象称为同事对象&#xff0c;它们之间通过彼…

​用细节去解释,如何打造一款行政旗舰车型

高山行政加长版应该是这个级别里最大的几款 MPV 之一了&#xff0c;对于一款较大的车型&#xff0c;其最重要的是解决行驶的便利性。 这次我们就试试魏牌高山行政加长版&#xff0c;从产品本身出发看几个纬度的细节&#xff1a; 行政该如何定义加长后产品的功能变化加长之后到…

Ladder类创建梯形对象共享一个下底

package Absent;public class Chapter5 {public static void main(String[] args) {Ladder.bottom100;Ladder ladderOnenew Ladder();Ladder ladderTwonew Ladder();ladderOne.top23;ladderTwo.top34;System.out.println("ladderOne的上底&#xff1a;"ladderOne.get…

Java 数组(详细)

目录 一、数组的概述 1. 数组的理解&#xff1a; 2. 数组相关的概念&#xff1a; 3. 数组的特点&#xff1a; 4. 数组的分类&#xff1a; 5.数据结构&#xff1a; 二、一维数组 1. 一维数组的声明与初始化 2. 一维数组元素的引用&#xff1a; 3. 数组的属性&#xff1…

Scikit-Learn逻辑回归

Scikit-Learn逻辑回归 1、逻辑回归概述1.1、逻辑回归1.2、逻辑回归的优缺点1.3、逻辑回归与线性回归2、逻辑回归的原理2.1、逻辑回归的概念与原理2.2、逻辑回归的损失函数2.3、梯度下降法求解逻辑回归的最优解3、Scikit-Learn逻辑回归3.1、决策边界3.2、Scikit-Learn逻辑回归AP…

【Java数据结构 -- 二叉树+树的深度优先遍历】

二叉树 1. 二叉树1.1 二叉树的介绍1.2 两种特殊的二叉树1.3 二叉树的性质1.4 二叉树的存储 2. 二叉树的基本操作2.1 二叉树的创建2.2 二叉树的优先遍历2.3 递归实现二叉树遍历2.4 用非递归实现二叉树遍历 1. 二叉树 1.1 二叉树的介绍 二叉树是一种数据结构&#xff0c;一颗二…

小朋友来自多少小区 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 幼儿园组织活动&#xff0c;老师布置了一个任务&#xff1a; 每个小朋友去了解与自己同一个小区的小朋友还有几个。 我们将这些数量汇总到数组 garden 中。 请…