在上一篇中,我们系统梳理了 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);