通过Selenium在Microsoft Edge中下载文件

时间:2018-07-18 10:25:54

标签: java selenium-webdriver webdriver automated-tests microsoft-edge

我必须自动化一个案例,其中必须使用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中吗?

2 个答案:

答案 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();