如何使用上传和下载文件 Selenium

⚡ 智能摘要

使用上传和下载文件 Selenium WebDriver 工作流依赖于原生 sendKeys() 函数处理输入字段,依赖于 AutoIt 或 Robot 处理对话框,以及 CDP 命令。 Selenium 4. 在自动化运行期间设置安全下载路径。

  • 📤 上传方式: 在文件输入元素上使用 sendKeys() 函数,无需点击“浏览”按钮即可推送绝对文件路径。
  • 📥 下载路径: 通过 ChromeOptions 或 CDP Page.setDownloadBehavior 配置自定义下载目录 Selenium 4.
  • 🪟 原生对话: 当操作系统文件选择器阻止 WebDriver 交互时,触发 AutoIt 脚本或 java.awt.Robot。
  • 🤖 人工智能协助: 生成式人工智能会自动建议选择器、构建测试数据文件并验证下载文件的完整性。
  • 🛡️ 验证检查: 通过响应消息确认上传成功,并通过文件大小或校验和比较验证下载。

如何使用上传和下载文件 Selenium

在 WebDriver 中上传文件只需在文件选择输入字段上使用 sendKeys() 方法输入要上传的文件路径即可。在本教程中,您将学习如何使用 WebDriver 处理文件上传和下载。 Selenium WebDriver。

如何上传文件 Selenium

在本节中,我们将使用 https://demo.guru99.com/test/upload/ 作为我们的测试应用程序。此网站允许任何访问者轻松上传文件,而无需他们注册。

上传文件 Selenium
处理文件上传弹出窗口 Selenium 网络驱动程序

假设我们要上传文件“C:\newhtml.html”。我们的 WebDriver 代码应如下所示。

新项目;
进口 org.openqa.selenium.*;
进口 org.openqa.selenium.firefox。Firefox司机;
公开课 PG9 {
公共静态无效 主要的([] args) {
System.setProperty(“webdriver.gecko.driver”,“C:\\geckodriver.exe”);
基本网址 = “https://demo.guru99.com/test/upload/”;
网络驱动程序 司机 = Firefox司机();

driver.get(baseUrl);
WebElement uploadElement = driver.findElement(By.id(“uploadfile_0”));

// 在文件选择输入框中输入文件路径
uploadElement.sendKeys(“C:\\newhtml.html”);

// 勾选“我接受服务条款”复选框
driver.findElement(By.id(“条款”))。点击();

// 点击“上传文件”按钮
driver.findElement(By.name(“发送”))。点击();
}
}

运行此脚本后,您应该能够成功上传文件,并且应该收到类似这样的消息。

上传文件 Selenium

使用 WebDriver 上传文件时,请记住以下两点:

  1. 无需模拟点击“浏览”按钮。WebDriver 会自动将文件路径输入到文件选择文本框中。元素。
  2. 在设置文件路径时 Java IDE,使用正确的反斜杠转义字符。

上传文件 Selenium

使用 AutoIt 处理非输入上传对话框

当页面使用自定义的“浏览”按钮而不是原生按钮时元素中的 sendKeys() 函数不起作用。在这种情况下,您可以从元素调用 AutoIt 脚本。 Selenium 在操作系统对话框中输入文件路径,然后按 Enter 键。

将下面的脚本保存为 upload.au3将其编译为 upload.exe然后从 Java 点击“浏览”按钮后。

; upload.au3 – 等待“打开”对话框并输入文件路径
WinWaitActive(“打开”)
发送(“C:\newhtml.html”)
发送(“{进入}”)

从 Java点击“浏览”按钮后触发辅助函数:

driver.findElement(By.id(“浏览按钮”))。点击();
运行时.getRuntime().exec(“C:\\AutoIt\\upload.exe”);

java.awt.Robot 类是一个纯函数式的Java 当 AutoIt 不可用时,这是一个替代方案,尽管 AutoIt 更可靠。 Windows 因为它会按标题等待对话框。

如何下载文件 Selenium 网络驱动程序

WebDriver 无法访问下载对话框 单击下载链接或按钮时,浏览器会弹出下载对话框。但是,我们可以使用名为“wget”的单独程序绕过这些对话框。

什么是 Wget?

Wget 是一个小型且易于使用的命令行程序,用于自动下载. 基本上,我们将从我们的 WebDriver 脚本访问 Wget 来执行下载过程。

设置 Wget

步骤1) 在 C 盘中,创建一个新文件夹并将其命名为“Wget”。

下载 wget.exe 从这里开始 并将其放入你在上一步创建的 Wget 文件夹中。

设置 Wget

步骤2) 按下“打开运行” Windows 按 R 键 + “R”;输入“cmd”并单击“确定”。

设置 Wget

输入命令“cd /”切换到根目录。

设置 Wget

步骤3) 输入命令以检查给定的设置是否正常工作。

cmd /c C:\\Wget\\wget.exe -PC: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

设置 Wget

写入 C 盘似乎存在问题。

步骤4) 在执行代码之前,您需要在命令行中调试 wget 错误。 Selenium WebDriver。这些错误将持续存在。 Eclipse 而且错误信息可能不够详细。最好先用命令行让 wget 正常工作。如果它在命令行下可以运行,那么它肯定也能在 Windows 系统中运行。 Eclipse.

如步骤 3 所示,在我们的示例中,写入 C 盘时出现问题。让我们将下载位置更改为 D 盘并检查结果。

cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

设置 Wget

Messenger 已成功下载。

在继续操作之前,请不要忘记删除已下载的文件。

使用 WebDriver 和 Wget

在以下示例中,我们将使用 WebDriver 和 wget 下载名为 Yahoo 的流行聊天软件 Messenger我们的基地 URL 应该 https://demo.guru99.com/test/yahoo.html.

使用 WebDriver 和 Wget

步骤1) 导入“java.io.IOException”包,因为我们必须在后面的第 4 步中捕获 IOException。

使用 WebDriver 和 Wget

步骤2) 使用 getAttribute() 函数获取下载链接的“href”值,并将其保存为字符串变量。在本例中,我们将该变量命名为“sourceLocation”。

使用 WebDriver 和 Wget

步骤3) 使用以下命令设置 wget 的语法。

使用 WebDriver 和 Wget

步骤4) 通过从我们的 WebDriver 代码调用 wget 来启动下载过程。

使用 WebDriver 和 Wget

总而言之,您的 WebDriver 代码可能看起来像下面显示的那样。

新项目;
进口 java.io.IO异常;

进口 org.openqa.selenium.*;
进口 org.openqa.selenium.firefox。Firefox司机;
公开课 PG8 {
公共静态无效 主要的([] args) {

System.setProperty(“webdriver.gecko.driver”,“C:\\geckodriver.exe”);
基本网址 = “https://demo.guru99.com/test/yahoo.html”;
网络驱动程序 司机 = Firefox司机();

driver.get(baseUrl);
WebElement downloadButton = driver.findElement(By.id(“messenger-download”));
sourceLocation = downloadButton.getAttribute(“href”);
wget_command = “cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate “ + 源位置;

尝试 {
工艺应用 exec = Runtime.getRuntime().exec(wget_command);
INT exitVal = exec.waitFor();
系统.out.println(“退出值:“ + exitVal);
} 捕捉 (中断异常 | IO异常 前任) {
System.out.println(ex.toString());
}
驱动程序关闭();
}
}

执行此代码后,检查您的 D 盘并验证 Yahoo Messenger 安装程序已成功下载。

使用 WebDriver 和 Wget

设置自定义下载路径 Selenium 4 CDP

Selenium 第 4 点暴露了 Chrome DevTools 协议,使您无需第三方工具即可控制浏览器的下载行为。以下代码片段将所有下载指向一个自定义文件夹,并跳过“另存为”提示,以便文件保存在测试预期的位置。

ChromeDriver 司机 = 铬驱动程序();
地图<,摆件> 参数 = HashMap<>();
params.put(“行为”, “允许”);
params.put(下载路径, “D:\\selenium-downloads”);
driver.executeCdpCommand(“Page.setDownloadBehavior”,参数);
驱动程序.get(“https://demo.guru99.com/test/yahoo.html”);
driver.findElement(By.id(“messenger-download”))。点击();

您可以通过轮询目标目录以获取预期文件名并检查其大小来验证下载,这使得测试无需外部脚本即可确定性。

常见问题

Selenium 调用 sendKeys()元素包含绝对文件路径。浏览器会直接填充该字段,因此不会打开操作系统文件选择器,也无需点击“浏览”按钮。

当页面未显示文件输入框时,请使用 AutoIt on Windows 或者使用 java.awt.Robot 类。这些工具需要在当前操作系统的对话框中输入路径,然后单击“浏览”按钮并按 Enter 键。

调用 executeCdpCommand(“Page.setDownloadBehavior”, params),并将 behavior 设置为 allow,downloadPath 设置为您的文件夹。 Selenium 4 将命令转发到 Chrome DevTools,并跳过“另存为”提示。

是的。AI 助手会读取您的上传表单,建议选择器,生成边界文件(例如空文件、超大文件或扩展名错误的样本),并写入 sendKeys() 代码块。这缩短了设置时间,并能发现人工测试人员经常忽略的极端情况。

AI工具 轮询目标文件夹,将文件大小和校验和与预期值进行比较,并标记不匹配项。视觉模型甚至可以打开 PDF 或图像,并确认内容与链接标签匹配,从而省去了回归测试中的人工审核。

Wget 完全绕过浏览器,通过命令行进程直接将文件保存到磁盘。它在旧版操作系统上非常有用。 Selenium 2 或 3 种设置中,CDP 和 ChromeOptions 下载首选项不可用。

总结一下这篇文章: