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

在 WebDriver 中上传文件只需在文件选择输入字段上使用 sendKeys() 方法输入要上传的文件路径即可。在本教程中,您将学习如何使用 WebDriver 处理文件上传和下载。 Selenium WebDriver。
如何上传文件 Selenium
在本节中,我们将使用 https://demo.guru99.com/test/upload/ 作为我们的测试应用程序。此网站允许任何访问者轻松上传文件,而无需他们注册。

假设我们要上传文件“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(“发送”))。点击();
}
}
运行此脚本后,您应该能够成功上传文件,并且应该收到类似这样的消息。
使用 WebDriver 上传文件时,请记住以下两点:
- 无需模拟点击“浏览”按钮。WebDriver 会自动将文件路径输入到文件选择文本框中。元素。
- 在设置文件路径时 Java IDE,使用正确的反斜杠转义字符。
使用 AutoIt 处理非输入上传对话框
当页面使用自定义的“浏览”按钮而不是原生按钮时元素中的 sendKeys() 函数不起作用。在这种情况下,您可以从元素调用 AutoIt 脚本。 Selenium 在操作系统对话框中输入文件路径,然后按 Enter 键。
将下面的脚本保存为 upload.au3将其编译为 upload.exe然后从 Java 点击“浏览”按钮后。
WinWaitActive(“打开”)
发送(“C:\newhtml.html”)
发送(“{进入}”)
从 Java点击“浏览”按钮后触发辅助函数:
运行时.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 文件夹中。
步骤2) 按下“打开运行” Windows 按 R 键 + “R”;输入“cmd”并单击“确定”。
输入命令“cd /”切换到根目录。
步骤3) 输入命令以检查给定的设置是否正常工作。
写入 C 盘似乎存在问题。
步骤4) 在执行代码之前,您需要在命令行中调试 wget 错误。 Selenium WebDriver。这些错误将持续存在。 Eclipse 而且错误信息可能不够详细。最好先用命令行让 wget 正常工作。如果它在命令行下可以运行,那么它肯定也能在 Windows 系统中运行。 Eclipse.
如步骤 3 所示,在我们的示例中,写入 C 盘时出现问题。让我们将下载位置更改为 D 盘并检查结果。
Messenger 已成功下载。
在继续操作之前,请不要忘记删除已下载的文件。
使用 WebDriver 和 Wget
在以下示例中,我们将使用 WebDriver 和 wget 下载名为 Yahoo 的流行聊天软件 Messenger我们的基地 URL 应该 https://demo.guru99.com/test/yahoo.html.
步骤1) 导入“java.io.IOException”包,因为我们必须在后面的第 4 步中捕获 IOException。
步骤2) 使用 getAttribute() 函数获取下载链接的“href”值,并将其保存为字符串变量。在本例中,我们将该变量命名为“sourceLocation”。
步骤3) 使用以下命令设置 wget 的语法。
步骤4) 通过从我们的 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 安装程序已成功下载。
设置自定义下载路径 Selenium 4 CDP
Selenium 第 4 点暴露了 Chrome DevTools 协议,使您无需第三方工具即可控制浏览器的下载行为。以下代码片段将所有下载指向一个自定义文件夹,并跳过“另存为”提示,以便文件保存在测试预期的位置。
地图<串,摆件> 参数 = 新 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”))。点击();
您可以通过轮询目标目录以获取预期文件名并检查其大小来验证下载,这使得测试无需外部脚本即可确定性。












