Selenium 自动化 —— 高级交互(click、sendKeys、submit、clear、select)

news2025/1/24 11:33:12

更多关于Selenium的知识请访问CSND论坛“兰亭序咖啡”的专栏:专栏《Selenium 从入门到精通》

​​


1. 前言

这是我的《Selenium从入门到精通》专栏的第11篇文章,前面花了很多时间在元素的定位上。不管是爬虫和自动化,找到元素后,我们通常还会需要和这么网页元素做一些交互,比如:

  • 点击“注册”按钮
  • 在“账号文本框”中输入账号
  • 清空文本内容
  • 提交“注册表单”
  • 在“证件类型”下拉列表中选择身份证

Selenium WebDriver提供了一系列简洁而强大的API,可以通过它们直接操纵页面上的各类元素,从而模拟用户交互行为。和上面的需求基本对应:

  • click 模拟用户点击元素的动作
  • send keys 向可输入的文本元素发送文本数据
  • clear 清除文本元素中的内容
  • submit 模拟提交表单操作
  • select 处理下拉选择框

本文将系统性地介绍Selenium中对Web元素进行操作的五大核心命令,并通过Java代码示例展示其具体应用。

2. 五大核心命令

我们用Java和Junit来测试Selenium。测试结构:

@Slf4j
public class InteractionTest {
    private WebDriver driver = null;
    @BeforeEach
    public void setup(){
        driver = new ChromeDriver();
    }
    @AfterEach
    public void tearDown(){
        driver.quit();
    }

    @Test
    public void test() throws InterruptedException {
        // 测试代码写在这里!
    }
}

2.1 sendKeys() 输入文本

我们可以通过 sendKeys 可输入的文本元素(如输入框、可编辑区域)发送文本数据。

@Test
public void testSendKeys() throws InterruptedException {
    driver.get("https://www.baidu.com");
    WebElement searchBtn = driver.findElement(By.id("kw"));
    searchBtn.sendKeys("兰亭序咖啡的专栏");

    TimeUnit.SECONDS.sleep(5);
}

可以看到“兰亭序咖啡”被自动填写到用户名文本框。

2.2 click() 点击

click 可以模拟用户点击元素的动作,几乎适用于页面上的任何可点击元素,如按钮、链接等。

@Test
public void testClick() throws InterruptedException {
    driver.get("https://passport.baidu.com/v2/?reg");
    WebElement verifyCodeSend = driver.findElement(By.id("TANGRAM__PSP_4__verifyCodeSend"));
    verifyCodeSend.click();

    TimeUnit.SECONDS.sleep(5);
}

点击“获取验证码” 按钮

2.3 clear() 清空文本

clear() 用来清除文本元素中的内容,同样只适用于可输入的文本元素。

@Test
public void testClick() throws InterruptedException {
    driver.get("https://passport.baidu.com/v2/?reg");
    WebElement userName = driver.findElement(By.name("userName"));
    userName.sendKeys("兰亭序咖啡的专栏");
    TimeUnit.SECONDS.sleep(5);

    userName.clear();
    TimeUnit.SECONDS.sleep(5);
}

文本框先是被设置,然后等待几秒后被清空

2.4 submit() 提交表单

submit 用来 模拟提交表单操作,通常用于表单元素,当点击表单内的提交按钮时,会触发此操作。

@Test
public void testSubmit() throws InterruptedException {
    driver.get("https://passport.baidu.com/v2/?reg");
    driver.findElement(By.name("userName")).sendKeys("abab233214567");

    driver.findElement(By.id("TANGRAM__PSP_4__form")).submit();
    TimeUnit.SECONDS.sleep(5);
}

尝试提交表单(不经过点击“登录”按钮)

因为一些必填字段没有填写,所以提交不成功

2.5 select() 选择下拉列表

select() 专门用于处理下拉选择框(<select>元素),提供了丰富的选项选择方法,如按值、索引或文本选择。

@Test
public void testSelect() throws InterruptedException {
    driver.get("https://www.runoob.com/try/try.php?filename=tryhtml_option");
    WebElement dropdown = driver.findElement(By.xpath("//select"));
    Select select = new Select(dropdown);

    select.selectByIndex(3);

    select.selectByValue("saab");

    select.selectByVisibleText("Volvo");

    TimeUnit.SECONDS.sleep(5);
}

可以通过三种方式选中特定的下拉列表选项!

3. 高级交互的特点

其实除了本文要介绍的五大核心交互外,Selenium 还提供了更底层的Action类也可以实现类似的功能。那么它们有什么区别呢?

因为这五个核心交互命令是高级的交互,也就是模拟人类的操作,所以,它们有两个特别的点:

  • 如果元素不在页面的可视范围,它会滚动页面到元素的位置,然后再操作。
  • 做这些操作前,Selenium 会确保元素是可交互的。(interactable)。如果元素不可交互,会抛出ElementNotInteractableException的异常!

下面几种情况会抛出ElementNotInteractableException异常:

  • 元素不在可视范围内——比如被其它元素挡住了(比如loading框)
  • 元素没有显示——比如隐藏的元素
  • 不可点击——比如页面还在加载中,或者按钮是disabled状态

4. 结束语

本文介绍了五种常用的高级交互,通过Selenium提供的这些特性,我们可以用Selenium实现更丰富的功能。关注兰亭序咖啡,一起学习更多Selenium的知识。

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

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

相关文章

原生IP介绍

原生IP&#xff0c;顾名思义&#xff0c;即初始真实IP地址&#xff0c;是指从互联网服务提供商获得的IP地址&#xff0c;IP地址在互联网与用户之间直接建立联系&#xff0c;不需要经过代理服务器代理转发。 原生IP具备以下特点。 1.直接性 原生IP可以直接连接互联网&#xff…

实例分割——Embrapa酿酒葡萄数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

Windows下配置TortoiseGit 访问Ubuntu虚拟机下Samba共享目录

前言&#xff1a; 本文记录学习使用 Git 版本管理工具的学习笔记&#xff0c;通过阅读参考链接中的博文和实际操作&#xff0c;快速的上手使用 Git 工具。 本文参考了引用链接博文里的内容。 引用: 【TortoiseGit】TortoiseGit安装和配置详细说明-CSDN博客 Git版本管理可视…

Keil问题解决:结构体数组初始化,初始化后的值不是目标值

省流&#xff1a;使用的编译器为compiler version 6&#xff0c;切换为compiler version 5 如果缺少编译器&#xff0c;请参考&#xff1a;Keil手动安装编译器V5版本 结构体定义&#xff1a; typedef struct _TASK_COMPONENTS {uint8_t Run; // 程序运行标…

Visual Studio 创建DLL 、LIB及调用

Visual Studio 创建DLL 、LIB及调用_visual studio 生成dll-CSDN博客 对上述文章进行补充 按照本文操作即可完成。 step1&#xff1a;新建控制台应用 Step2&#xff1a;新建类 在DLL.h内写入&#xff1a; #pragma once class __declspec(dllexport) DLL {public:int myAdd(i…

华为OD机试【分奖金】(java)(100分)

1、题目描述 公司老板做了一笔大生意&#xff0c;想要给每位员工分配一些奖金&#xff0c;想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序&#xff0c;每个人随机抽取一个数字。按照工号的顺序往后排列&#xff0c;遇到第一个数字比自己数字大的&#xff0c;那么&…

[数据集][目标检测]蕃茄核桃桔子龙眼青枣5种水果检测数据集VOC+YOLO格式270张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;270 标注数量(xml文件个数)&#xff1a;270 标注数量(txt文件个数)&#xff1a;270 标注类别…

「AIGC算法」近邻算法原理详解

本文主要介绍近邻算法原理及实践demo。 一、原理 K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于距离的分类算法&#xff0c;其核心思想是距离越近的样本点&#xff0c;其类别越有可能相似。以下是KNN算法的原理详解&#xff1a; 1. 算…

详细分析Python中的win32com(附Demo)

目录 前言1. 基本知识2. Excel3. Word 前言 对于自动化RPA比较火热&#xff0c;相应的库也比较多&#xff0c;此文分析win32com这个库&#xff0c;用于操作office 1. 基本知识 Win32com 是一个 Python 模块&#xff0c;是 pywin32 扩展的一部分&#xff0c;允许 Python 代码…

【讲解下PDM,PDM是什么?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

ELF 1技术贴|如何在Ubuntu上配置Samba服务器

Samba是一个开源的软件套件&#xff0c;提供了一种实现SMB/CIFS协议的方式&#xff0c;可以无缝链接Linux与Windows系统&#xff0c;让开发者在局域网络框架下实现共享文件、打印资源等&#xff0c;确保了数据交流的高效与稳定。 相较于在Ubuntu环境下运用传统的Vim编辑器&…

AI图书推荐:ChatGPT 和Power BI驱动未来金融投资变革

《ChatGPT 和Power BI驱动未来金融变革》&#xff08;The Future of Finance with ChatGPT and Power BI&#xff09;由James Bryant和Aloke Mukherjee撰写&#xff0c;探讨了ChatGPT和Power BI在金融领域的应用。 主要特点&#xff1a; - 使用ChatGPT自动化Power BI&#xff…

【算法】网络图中的dfs

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、单词搜索二、黄金矿工三、不同路径 |||四、图像渲染五、岛屿数量六、岛屿的最大面积七、被围绕的区域…

Oracle 自治数据库 Select AI 初体验

这几天有点时间&#xff0c;准备尝试下Oracle Select AI&#xff0c;虽然此功能2023年就已经发布了。 Oracle自治数据库已经集成好了Select AI&#xff0c;本文也是讲的这个。 配置 Select AI 需要以下步骤&#xff1a; 创建ADB申请Cohere/OpenAI免费账号设置ADB测试Select…

【微信小程序开发(从零到一)【婚礼邀请函】制作】——邀请函界面的制作(2)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

开发属于自己的Spring Boot Starter-18

为什么要开发专用的Spring Boot Starter Spring在通常使用时&#xff0c;一般是通过pom.xml文件中引入相关的jar包&#xff0c;然后再通过application.yml文件配置初始化bean的配置&#xff0c;但随着项目越来越复杂或是项目组中的应用数量越来越多&#xff0c;可能会带来几个…

为什么买的蓝牙串口模块不能实现蓝牙键盘给手机文本框或记事本打字或控制手机?

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言1、原因2、蓝牙键盘制作流程 前言 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时更新&#xff09; 【…

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…

4.线性代数

深度学习作为一门前沿的、应用广泛的学科&#xff0c;对于数学基础的要求非常高。 线性代数 线性代数在深度学习中扮演着至关重要的角色。它不仅是描述和理解数据的基础工具&#xff0c;也是构建和训练神经网络的核心组件。例如&#xff0c;在深度学习中&#xff0c;我们经常…

ArcGI基本技巧-科研常用OLS, GWR, GTWR模型实现

ArcGI基本技巧-科研常用OLS, GWR, GTWR模型实现 OLS,GWR,GTWR回归模型均可以揭示解释变量对被解释变量的影响且可以进行预测。Ordinary Least Squares (OLS)是最小二乘法&#xff0c;Geographically Weighted Regression (GWR)是地理加权回归&#xff0c;Geographically and T…