【问题标题】:How do I control the browser file upload dialog using Selenium?如何使用 Selenium 控制浏览器文件上传对话框?
【发布时间】:2022-01-30 05:24:59
【问题描述】:

我正在开发一个使用 Selenium 和 ChromeDriver 自动将文件提交到网站的工具。

通常使用 Selenium 上传文件很容易,因为您只需将信息提供给 <input type="file"> 元素即可。但是,在这种情况下,我正在使用具有自定义文件上传按钮的网站,页面上的任何位置都没有 <input type="file">,并且在文件上传对话框中选择文件后立即上传(如下所示):

因此,我唯一的选择是让 Selenium 单击自定义上传按钮并控制文件对话框。但我无法弄清楚如何做到这一点。如何使用 Selenium 控制操作系统/浏览器文件上传对话框?

我看到this SO question 似乎不适用于我,因为他们在页面上有<input type="file"> 并试图触发上传对话框,但我没有那个元素,我没有问题触发对话框,我的问题是一旦打开对话框就控制它。我还阅读了关于上传多个文件的几个关于 SO 的问题,但没有一个信息可以帮助我解决我的情况。

【问题讨论】:

  • Selenium 使用什么绑定语言?我的意思是你使用的是什么编码语言?
  • @Prophet 我正在使用 C#
  • @ScriptDeveloper 该网站没有文件的拖放区。它是一个按钮(<button type="button">),触发一些打开文件对话框的 JS。
  • 您可以尝试使用 AutoIt 和 C# 来尝试上传文件。

标签: selenium file-upload upload selenium-chromedriver


【解决方案1】:

我找到了这个解决方案,我希望这对你也有用:
您可以使用 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"),这也应该有效。
感谢author

【讨论】:

  • 正如问题中所解释的,这对我不起作用,因为没有输入元素可以接受文件。网站上的上传按钮是完全自定义的,它是一个调用一些 JavaScript 来打开文件对话框并在选择后立即上传文件的按钮。我没有任何元素可以打电话给document.getElementById
  • 好的,我明白了。如果你愿意,我可以删除这个答案。或者我可以留下它,因为它可能对其他用户有帮助
猜你喜欢
  • 2021-12-25
  • 2016-06-23
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多