我正在开发一个使用 Selenium 和 ChromeDriver 自动将文件提交到网站的工具。
通常使用 Selenium 上传文件很容易,因为您只需将信息提供给
<input type="file">
元素即可。但是,在这种情况下,我正在使用一个具有自定义文件上传按钮的网站,页面上的任何位置都没有 <input type="file">
,并且在文件上传对话框中选择文件后立即进行上传(如下所示):
因此,我唯一的选择是让 Selenium 单击自定义上传按钮并控制文件对话框。但我不知道该怎么做。如何使用 Selenium 控制操作系统/浏览器文件上传对话框?
我已经看到这个SO问题,这似乎不适用于我,因为他们在页面上有
<input type="file">
并试图触发上传对话框,但我没有该元素,我没有问题触发对话框,我的问题是在对话框打开后控制它。我还阅读了有关上传多个文件的几个问题,但没有一个问题可以帮助我的情况。
我找到了这个解决方案,我希望这也适合你:
您可以使用 JavaScript 设置输入字段的值。考虑到字段的 id 为
fileName
,以下示例将设置文件的输入值 C:\temp\file.txt
:
String script = "document.getElementById('fileName').value='" + "C:\\\\temp\\\\file.txt" + "';";
((IJavaScriptExecutor)driver).ExecuteScript(script);
在此示例中,
driver
是您的 WebDriver 实例。
请注意,对于类似 Windows 的路径,您必须使用四个反斜杠 (
\
),因为您需要将双反斜杠传递给 JavaScript,因此您必须使用两个附加斜杠来转义这两个反斜杠。另一种选择是使用正斜杠(例如 "C:/tmp/file.txt"
),这也应该有效。