在WebDriver中使用HTTP下载文件

zs2*_*020 5 https webdriver watir-webdriver

我正在尝试使用WebDriver浏览https站点并使用WebDriver下载文件.当我这样做时,会弹出文件下载对话框.

WebDriver driver = new ChromeDriver();
driver.get("http://xxx/file1.txt");
Run Code Online (Sandbox Code Playgroud)

我想知道有没有办法在WebDriver中调用一个方法来使用常规https请求下载文件而不模拟点击?

提前致谢.

Jim*_*ans 8

没有,至少没有任何方式适用于所有浏览器.您可以将某些浏览器(Firefox和Chrome)配置为在不提示的情况下将文件下载到指定位置.但是,对于像你所问的那样,你根本就不需要Selenium.任何程序化的HTTP客户端都可以.在Java中,我建议从Apache查看HttpClient; 在.NET中使用HttpWebRequest将完成工作.请注意,如果您要从中下载文件的站点需要身份验证,则可能需要在HTTP请求中指定自定义标头.

作为旁注,您可能想要重新评估您认为需要测试下载文件的原因,如果它不像在浏览器外执行HTTP请求那么简单.本文非常详细地讨论了这个问题,并提供了一个非常合理的论据,为什么测试下载文件是有问题的,而且往往是不必要的.

  • 为了获得苏格拉底式,浏览器如何仅使用HTTP下载文件?在许多情况下,身份验证过程会设置包含身份验证信息的cookie,然后将其传递到HTTP请求的标头中.幸运的是,HTTP客户端库通常允许您对HTTP请求标头进行控制,因此您只需要cookie信息.我将编辑我的答案以解决问题,这在原始问题中没有提到. (2认同)

Sve*_*lav 7

是的你可以.您需要设置自定义Chromedriver配置文件:

profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.prompt_for_download'] = false
profile['download.default_directory'] = download_directory
Run Code Online (Sandbox Code Playgroud)

它不会提示任何对话框.我对如何设置下载目录更详细的解答,并验证该文件是任何给定大小的位置.

可在此处找到其他chromedriver开关:http://peter.sh/experiments/chromium-command-line-switches/