我正在尝试使用WebDriver在https站点中导航并使用WebDriver下载文件。当我这样做时,会弹出文件下载对话框。
WebDriver driver = new ChromeDriver();
driver.get("http://xxx/file1.txt");
我想知道有没有办法在WebDriver中调用一个方法来使用常规https请求下载文件而不模拟点击?
提前致谢。
答案 0 :(得分:8)
没有,至少没有任何方式适用于所有浏览器。您可以将某些浏览器(Firefox和Chrome)配置为在不提示的情况下将文件下载到指定位置。但是,对于像你所问的那样,你根本就不需要Selenium。任何程序化的HTTP客户端都可以。在Java中,我建议从Apache查看HttpClient;在.NET中使用HttpWebRequest将完成工作。请注意,如果您要下载文件的站点需要身份验证,则可能需要在HTTP请求中指定自定义标头。
作为旁注,您可能想要重新评估您认为需要测试下载文件的原因,如果它不像在浏览器外执行HTTP请求那么简单。 This article非常详细地讨论了这个问题,并提供了一个非常合理的论据,为什么测试下载文件是有问题的,而且往往是不必要的。
答案 1 :(得分:7)
是的,你可以。您需要设置自定义Chromedriver配置文件:
profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.prompt_for_download'] = false
profile['download.default_directory'] = download_directory
它不会提示任何对话框。 我有一个关于如何设置下载目录并验证文件是否具有任何给定大小here的更详细的答案。
可在此处找到其他chromedriver开关:http://peter.sh/experiments/chromium-command-line-switches/