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

更多关于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的知识。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jvisualvm安装Visual GC插件

给jdk自带的jvisualvm安装Visual GC插件&#xff0c;遇到We’re sorry the java.net site has closed&#xff08;我们很抱歉java.net网站已经关闭&#xff09; 1、找到新的更新地址 visualvm新访问地址&#xff1a;https://visualvm.github.io/index.html 进入“Plugins”&am…

【介绍下Python多线程,什么是Python多线程】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

一个可自动生成行排号的excel VBA小工具

如下图&#xff0c;点击“生成行排号”按钮即可生成想要的行排号 基本用法如下&#xff1a; 1、设置顺序排列的行排号&#xff08;每排的行号一致&#xff0c;行的方向排序方向也一致&#xff09; 2、设置顺序排列的行排号&#xff08;行号从小到大排列&#xff0c;而不受排的…

UEC++学习(十五)创建、查找、加入会话

创建会话 基于上篇配置steam在线子系统之后&#xff0c;在Character.h中声明一个会话创建完成时的委托以及回调函数。 #include "Interfaces/OnlineSessionInterface.h"public://指向在线会话界面的指针,将会话接口存储在里面TSharedPtr<class IOnlineSession, ES…

电脑缺失api-ms-win-crt-runtime-l1-1-0.dll文件的几种修复方法

当您在使用电脑过程中遇到程序启动失败&#xff0c;提示缺少“api-ms-win-crt-runtime-l1-1-0.dll”文件时&#xff0c;不必过于焦虑&#xff0c;此问题通常与Windows系统的Visual C Redistributable组件未正确安装或损坏有关。小编将介绍5种修复电脑缺失api-ms-win-crt-runtim…

STM32-09-IWDG

文章目录 STM32 IWDG1. IWDG2. IWDG框图3. IWDG寄存器4. IWDG寄存器操作步骤5. IWDG溢出时间计算6. IWDG配置步骤7. 代码实现 STM32 IWDG 1. IWDG IWDG Independent watchdog&#xff0c;即独立看门狗&#xff0c;本质上是一个定时器&#xff0c;这个定时器有一个输出端&#…

elementui 那些遇到的问题呀

1、在父组件调用子组件方法的&#xff0c;现在想关闭el-dialog 弹框&#xff0c;清除编辑器里面的值&#xff0c;结果哦方法走了但是没清空&#xff0c;原代码是这样的 父组件&#xff1a;<el-dialog closed"formulaclosed" v-model"detailsFormVisible&quo…

颜色的表示和还原(一)

这篇文章主要提炼于ICCV 2019 Tutorial: Understanding Color and the In-Camera Image Processing Pipeline for Computer Vision。里面深入浅出地讲解了很多ISP中的基础知识&#xff0c;这里主要对颜色相关的部分做一点总结。 假设不成立了 相机经常被简单地看作是衡量光线…

2022 年高教社杯全国大学生数学建模竞赛-C 题 古代玻璃制品的成分分析与鉴别详解+聚类模型Python代码源码

前言 简单介绍一下我自己&#xff1a;博主专注建模四年&#xff0c;参与过大大小小数十来次数学建模&#xff0c;理解各类模型原理以及每种模型的建模流程和各类题目分析方法。参与过十余次数学建模大赛&#xff0c;三次美赛获得过二次M奖一次H奖&#xff0c;国赛二等奖。**提…

设计模式:外观模式(Facade)

设计模式&#xff1a;外观模式&#xff08;Facade&#xff09; 设计模式&#xff1a;外观模式&#xff08;Facade&#xff09;模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景模式扩展参考 设计模式&#xff1…

21【Aseprite 作图】画白菜

1 对着参考图画轮廓 2 缩小尺寸 变成这样 3 本来是红色的描边&#xff0c;可以通过油漆桶工具&#xff08;取消 “连续”&#xff09;&#xff0c;就把红色的轮廓线&#xff0c;变成黑色的 同时用吸管工具&#xff0c;吸取绿色和白色&#xff0c;用油漆桶填充颜色 4 加上阴影…

TypeScript高级类型 在鸿蒙中的使用 Partial、Required、Readonly、Pick、Record

我的工程代码在这里&#xff0c;持续更新中 欢迎交流&#xff0c;谢谢 https://github.com/MartinLi89/WanHarmony Partial <Type> 新定义 一个类型&#xff0c;将所有属性变为可选的类. class TextTS {a: string "1"b: string "2"c: string &…

05-应用级开发者 AI 时代破局点

后端应用级开发者该如何拥抱 AI GC&#xff1f;就是在这样的一个大的浪潮下&#xff0c;我们的传统的应用级开发者。我们该如何选择职业或者是如何去快速转型&#xff0c;跟上这样的一个行业的一个浪潮? 0 AI金字塔模型 越往上它的整个难度就是职业机会也好&#xff0c;或者说…

Mysql-几何类型-POINT

在MySQL中&#xff0c;地理空间数据类型和功能被称为GIS&#xff08;Geographic Information System&#xff0c;地理信息系统&#xff09;。MySQL支持几种不同的空间数据类型&#xff0c;包括点&#xff08;POINT&#xff09;、线&#xff08;LINESTRING&#xff09;、多边形&…

Python 提取PDF表格数据并保存到TXT文本或Excel文件

目录 安装Python库 Python提取PDF表格数据并保存到文本文档 Python提取PDF表格数据并保存到Excel文档 PDF文件常用于存储和共享各种类型的文档&#xff0c;这些文档可能包括大量的数据表格。通过提取这些PDF表格数据&#xff0c;我们可以将其导入到Excel、数据库或统计软件等…

使用Docker进行Jmeter分布式搭建

大家好&#xff0c;随着技术的不断发展&#xff0c;对性能测试的要求也日益提高。在这样的背景下&#xff0c;如何利用 Docker 来巧妙地搭建 Jmeter 分布式成为了关键所在。现在&#xff0c;就让我们开启这场探索之旅&#xff0c;揭开其神秘的面纱。前段时间给大家分享了关于 L…

如何组织 Vue 项目

介绍 在启动 Vue 项目时&#xff0c;思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中&#xff0c;我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合&#xff1a; “设计系统的组织受限于产生这些组织沟通结构的设计。” - 梅尔康威 基…

平均工资数据分析之回归

链接: R语言实战——中国职工平均工资的变化分析——相关与回归分析 1、模型诊断和评估的方法 1. 残差分析 1、残差图 (Residual Plot)&#xff1a;用于检查残差是否存在非随机模式。理想情况下&#xff0c;残差应随机分布在零附近。 2、Q-Q 图 (Quantile-Quantile Plot)&am…

redis-stack部署概要

第一步&#xff0c;下载redis-stack 下载链接&#xff1a;Downloads - Redis 第二步&#xff0c;redis安装包解压缩 gzip -d redis-stack-server-7.2.0-v10.rhel8.x86_64.tar.gz tar -xvf redis-stack-server-7.2.0-v10.rhel8.x86_64.tar 第三步&#xff0c;编辑etc下的redis…

高性能日志库go-logger2.0.4—支持slog日志文件切割

go-logger v2.0.4 发布 该版本主要支持go原生日志库 log/slog 的日志文件切割&#xff0c;压缩等功能。 log/slog 库是 Go 语言用于结构化日志记录的一个强大工具&#xff0c;它旨在提升日志的管理和分析能力&#xff0c;同时保证代码的简洁性和执行效率。随着 Go 语言生态的…