我必须自动化一个案例,其中必须使用Selenium WebDriver和跨浏览器下载文件。
我已经为Chrome(通过ChromeOptions
),FF(通过FirefoxProfile
)和IE11做到了。例如,对于Firefox,我使用Firefox Profile
来抑制下载提示,如下所示:
profile.setPreference("browser.download.dir", "C:\\DownloadCleanup");
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", mimeTypes);
对于IE11,我使用Robot
类按下组合键Alt + S
,如下所示:
Robot robot = new Robot();
// simulate the "Alt + S" to save file on IE11 when Download Prompt appears
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_ALT);
robot.keyRelease(KeyEvent.VK_S);
一切正常。现在,我想在Edge中执行此操作。但是我找不到IE11之类的Edge组合键,或者像Chrome和FF之类的,却找不到设置键。
我在Edge中手动尝试,但是当出现下载提示时,似乎没有保存文件的捷径。因此,我的解决方法是转到“边缘”->“设置”->“高级设置”,然后停用此下载提示。
有人知道如何通过Selenium来做到这一点,例如在Chrome,FF中吗?
答案 0 :(得分:1)
不这样做,就是在浪费时间。
浏览器制造商已经测试了浏览器下载机制是否可以正常工作,如果最坏的情况发生了并且这种情况中断了,您将无法强制用户更改浏览器版本。
如果您确实要检查服务器端是否存在文件,则可以使用标准的http库(例如OkHttp)来执行此操作。您不需要实际下载文件来检查文件是否存在,除非您正在积极检查文件内容,否则应避免下载文件(在这种情况下,我建议您使用SHA1或MD5哈希值检查文件是否匹配)。
我以前曾经写过关于on my blog的文章,尽管现在这些信息已经过时了。
答案 1 :(得分:0)
如果要在没有下载提示的情况下在EDGE上下载文件,则必须将EDGE“ EnableSavePrompt”的注册表项更改为00000000。我在C#上使用此代码:
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge", true);
if (key.OpenSubKey("Download") == null)
{
key.CreateSubKey("Download");
}
key = key.OpenSubKey(@"Download", true);
key.SetValue("EnableSavePrompt", 00000000);
key.Close();