news 2026/10/15 14:16:41

Selenium 核心 API 解析(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Selenium 核心 API 解析(三)

在上一篇中,我们系统梳理了 Selenium 的八大元素定位方式与动态元素定位方案。定位到元素之后,真正的自动化交互要靠各类元素操作、窗口控制、浏览器配置 API 来实现。本文整理 Selenium WebDriver 最常用的核心 API,覆盖元素交互、窗口管理、截图留证、导航控制、弹窗处理、文件上传、启动参数配置七大模块。

一、元素基础交互 API

元素定位完成后,最常用的就是点击、输入、清空、获取信息这四类操作,是所有自动化脚本的基础。

1. 点击操作 click ()

最核心的交互方法,用于按钮、链接、复选框、单选框等所有可点击元素。

// 点击百度一下按钮 driver.findElement(By.cssSelector("#su")).click();

2. 文本输入 sendKeys ()

用于输入框、文本域等可编辑元素,传入需要输入的字符串内容。

// 在百度搜索框输入关键词 driver.findElement(By.cssSelector("#kw")).sendKeys("输入文字");

3. 清空文本 clear ()

清空输入框中已有的内容,通常在重新输入前调用,避免内容叠加。

driver.findElement(By.cssSelector("#kw")).sendKeys("我爱游戏"); // 清空输入框现有内容 driver.findElement(By.cssSelector("#kw")).clear();

4. 获取元素文本 getText ()

获取元素的可见文本内容,是自动化断言、结果校验最常用的方法。

String bdtext = driver.findElement(By.xpath("//*[@id='title-content']/span[1]")).getText(); System.out.println("打印的内容是:" + bdtext);

5. 获取元素属性 getAttribute ()

获取元素指定属性的值,比如 href、class、id、value 等,适合获取非可见的属性信息。

// 获取元素的class属性值 String s = driver.findElement(By.xpath("……")).getAttribute("class"); System.out.println("打印的内容是:" + s);

6. 页面级信息获取

两个全局页面信息方法,常用于页面跳转后的正确性校验:

  • getTitle():获取当前页面的标题
  • getCurrentUrl():获取当前页面的完整 URL 地址

二、窗口句柄与窗口管理

Selenium 通过句柄(handle)唯一标识每个浏览器标签页或独立窗口,所有窗口级操作都基于句柄实现。

1. 句柄获取与切换

  • getWindowHandle():获取当前页面的句柄,返回字符串类型
  • getWindowHandles():获取所有已打开页面的句柄集合
  • switchTo().window(句柄):将操作上下文切换到指定句柄的窗口

典型场景:点击链接打开新标签页后,切换到新页面继续操作。

String curWindow = driver.getWindowHandle(); Set<String> allWindow = driver.getWindowHandles(); // 遍历所有窗口,切换到非当前的新窗口 for (String w : allWindow) { if (!w.equals(curWindow)) { driver.switchTo().window(w); } }

2. 窗口大小控制

// 窗口最大化 driver.manage().window().maximize(); // 窗口最小化 driver.manage().window().minimize(); // 全屏显示 driver.manage().window().fullscreen(); // 手动设置窗口宽高 driver.manage().window().setSize(new Dimension(1024, 768));

3. 窗口关闭:close () 与 quit () 的区别

这是一个踩坑点,二者作用范围完全不同:

  • driver.close():仅关闭当前句柄对应的标签页,浏览器进程本身不退出
  • driver.quit():关闭所有标签页,彻底退出整个浏览器进程

⚠️ 注意:使用 close () 关闭页面后,必须手动切换到剩余的有效窗口句柄,否则继续操作元素会抛出NoSuchElementException。

三、屏幕截图:自动化异常留证

自动化脚本通常在后台无人值守运行,出错时无法直观看到页面现场。屏幕截图是定位问题、留存证据的核心手段。

依赖说明

使用文件保存功能需要引入commons-io工具包:

<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>

基础版本

直接截图并保存为指定文件名,适合简单调试场景。

File srcfile = driver.getScreenshotAs(OutputType.FILE); // 保存为 my.png FileUtils.copyFile(srcfile, new File("my.png"));

高阶版本:按时间命名防覆盖

通过时间戳生成文件路径,避免多次运行截图被同名覆盖,适合批量测试、CI 执行场景。

List<String> times = getTime(); // 自定义方法获取格式化时间 // 示例路径:./src/test/autotest-2022-08-01/goodsbroser-20220801-214130.png String filename = "./src/test/autotest-" + times.get(0) + "/" + str + "" + times.get(1) + ".png"; File srcfile = driver.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(srcfile, new File(filename));

四、浏览器导航操作

1. 打开网页

两种常用写法,执行效果完全一致:

// 方式1:get 方法,写法简洁 driver.get("https://selenium.dev/"); // 方式2:navigate.to 方法,语义更清晰 driver.navigate().to("https://selenium.dev/");

2. 前进、后退、刷新

对应浏览器左上角的导航按钮,用于页面流转控制:

// 后退到上一页 driver.navigate().back(); // 前进到下一页 driver.navigate().forward(); // 刷新当前页面 driver.navigate().refresh();

五、弹窗处理

浏览器原生弹窗(alert/confirm/prompt)不属于 DOM 元素,无法用常规元素定位,必须先切换到弹窗上下文才能操作。

1. 警告 / 确认弹窗

只有提示信息和确认、取消按钮的基础弹窗:

// 切换到弹窗上下文 Alert alert = driver.switchTo().alert(); // 点击确认按钮 alert.accept(); // 点击取消按钮 alert.dismiss(); // 操作完成后切回主页面 driver.switchTo().defaultContent();

2. 可输入提示弹窗

支持输入文本的 prompt 类型弹窗:

Alert alert = driver.switchTo().alert(); // 在弹窗输入框中输入内容 alert.sendKeys("hello"); alert.accept();

六、文件上传

点击文件上传按钮会弹出系统级文件选择窗口,Selenium 无法操作系统原生控件。

通用解决方案:直接定位页面上的<input type="file">元素,通过sendKeys()传入本地文件的绝对路径,效果与手动选择文件完全一致。

WebElement ele = driver.findElement(By.cssSelector("body > div > div > input[type=file]")); // 传入本地文件的绝对路径 ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

七、Chrome 浏览器启动参数配置

通过ChromeOptions可以自定义浏览器启动行为,适配调试、CI、性能优化等不同测试场景。

基础配置示例

// 自动管理驱动版本,无需手动下载 WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); // 允许跨域访问所有链接 options.addArguments("--remote-allow-origins=*"); // 以指定配置启动浏览器 WebDriver driver = new ChromeDriver(options);

1. 无头模式

  • 有头模式:正常显示浏览器 GUI 窗口,可直观看到操作过程,适合本地调试
  • 无头模式:后台静默运行,不显示界面,资源占用低、执行速度快,适合服务器、CI/CD 流水线执行
// 开启无头模式 options.addArguments("-headless");

2. 页面加载策略

有时候页面资源很多, 为了执行效率,不可能等待所有页面元素加载完成,再去获取。

通过setPageLoadStrategy控制页面加载的等待程度,在执行速度和稳定性之间做平衡:

策略说明特点
NONE完全不阻塞,浏览器开始加载后立即返回控制权速度最快,但元素未加载完成容易报错,需配合显式等待使用
EAGER等待 DOM 树解析完成,不等待图片等静态资源加载速度与稳定性均衡,推荐日常使用
NORMAL默认值,等待所有页面资源加载完成最稳定,但页面资源多的时候速度最慢
// 设置为EAGER加载策略 options.setPageLoadStrategy(PageLoadStrategy.EAGER);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 14:16:09

树模型面试真题解析:从原理到工业落地的完整能力链

1. 面试官真正想听的&#xff0c;从来不是“ID3怎么算信息增益”我带过不少准备机器学习面试的同学&#xff0c;也参与过几十场技术面谈。最常遇到的情况是&#xff1a;候选人能流利背出“CART用基尼不纯度&#xff0c;ID3用信息增益&#xff0c;XGBoost加了二阶泰勒展开”&…

作者头像 李华
网站建设 2026/10/15 14:15:43

雨课堂选择题自动化采集与MySQL题库构建

1. 项目概述&#xff1a;为什么一个“雨课堂选择题爬取”值得认真对待“长江雨课堂练习题的爬取&#xff0c;并存到mysql中&#xff08;仅限选择题&#xff0c;填空题有需要的可以自己补全&#xff09;”——这个标题乍看像是一份学生交的课设作业&#xff0c;但在我过去十年接…

作者头像 李华
网站建设 2026/10/15 14:15:42

Python魔法方法底层协议与实战:避开__eq__和__hash__的坑

我最早接触Python魔法方法&#xff08;Magic Methods&#xff09;时的第一反应是&#xff1a;这不就是C的运算符重载加Java的toString吗&#xff1f;抱着这个理解写了一段时间代码&#xff0c;直到有一次在项目的模拟数据类里同时实现了__eq__却没有处理__hash__&#xff0c;程…

作者头像 李华
网站建设 2026/10/15 14:15:41

NumPy 1.23.5 源码编译指南:掌控 multiarray 与 BLAS 构建全流程

简介&#xff1a;本资源是NumPy 1.23.5官方源码发布包&#xff08;tar.gz格式&#xff09;&#xff0c;面向Python中高级开发者、科学计算学习者及需要定制编译或深度理解底层实现的技术人员&#xff0c;解决依赖可控安装、源码级调试与C/Fortran扩展开发等核心需求。压缩包共2…

作者头像 李华
网站建设 2026/10/15 14:15:08

博图MODBUS轮询程序设计:构建稳定可诊断的PLC轮询系统

简介&#xff1a;本资源是一套面向工业自动化初学者与西门子S7-1200 PLC开发者的博图&#xff08;TIA Portal&#xff09;MODBUS轮询程序实战工程包&#xff0c;聚焦解决多从站设备数据采集与稳定通信问题&#xff0c;特别适用于小型产线监控、分布式I/O集成及现场调试场景。压…

作者头像 李华
网站建设 2026/10/15 14:14:36

.NET OPC UA通信Demo:连接、读写、订阅与断线重连实战

简介&#xff1a;这是一份面向.NET开发者与工业自动化工程师的OPC UA通信实战Demo&#xff0c;围绕连接、断开、读写、订阅与心跳监听五大核心操作展开&#xff0c;帮助读者快速掌握与PLC及自动化设备的数据交互方式。资源包共2000个文件&#xff0c;以1218个xml配置与数据文件…

作者头像 李华