Selenium C#Firefox 22 - 来自网络的“静默保存文件”不再有效

时间:2013-06-26 08:16:57

标签: c# firefox selenium nunit selenium-webdriver

我正在使用selenium框架2.33对WebPage进行测试。这里的TestCase应该验证文件的下载。

以下代码适用于Firefox 21及更早版本。自FF 22更新以来,它已不再有效,我还没有找到原因。

我用它来保存tar.gz文件,但是txt或CSV文件也失败了。

设置驱动程序:

FirefoxProfile profile = new FirefoxProfile();
profile.AcceptUntrustedCertificates = true;
profile.SetPreference("browser.download.dir", System.Environment.GetEnvironmentVariable("TEMP"));
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", "text/xml, text/csv, text/plain, text/log, application/zlib, application/x-gzip, application/x-compressed, application/x-gtar, multipart/x-gzip, application/tgz, application/gnutar, application/x-tar");
profile.SetPreference("pdfjs.disabled", true);
IWebDriver webDriver = new FirefoxDriver(profile);

测试:

webDriver.Navigate().GoToUrl("https://example.com/downloadthis.txt");

注意: 在firefox 22中,“about:config”存在具有给定参数的“browser.helperApps.neverAsk.saveToDisk”行。但尽管如此,当它在保存位置检查预期文件时,弹出“保存文件”对话框并且测试失败。

有没有人有想法或遇到过这个?

编辑:格式化

2 个答案:

答案 0 :(得分:3)

好的,在用户user1177636的帮助下,我找到了解决方案。

Firefox已将.tar.gz文件的MIME类型从FF 21更改为22

old:application / x-gzip new:application / gzip

将设置中的行更正为:

profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "text/xml, text/csv, text/plain, text/log, application/zlib, application/x-gzip, application/x-compressed, application/x-gtar, multipart/x-gzip, application/tgz, application/gnutar, application/x-tar, application/gzip");

它再次有效!

THX user1177636,我赞成你的评论(如果这有意义的话)!

答案 1 :(得分:0)

您可以下载所有文件(例如:.xls,.csv,.pdf)

我的申请中也面临同样的问题:

我在java中使用Robot获得了解决方案

以下代码我写下载所有文件

                    Thread.sleep(1000L);
                    //create robot object
                    Robot robot = new Robot();
                    Thread.sleep(1000L);
                    //Click Down Arrow Key to select "Save File" Radio Button
                    robot.keyPress(KeyEvent.VK_DOWN);
                    Thread.sleep(1000L);
                    // Click 3 times Tab to take focus on "OK" Button
                    robot.keyPress(KeyEvent.VK_TAB);
                    Thread.sleep(1000L);
                    robot.keyPress(KeyEvent.VK_TAB);
                    Thread.sleep(1000L);
                    robot.keyPress(KeyEvent.VK_TAB);
                    Thread.sleep(1000L);
                    //Click "Enter" Button to download file
                    robot.keyPress(KeyEvent.VK_ENTER);
                    Thread.sleep(5000L);
                    System.out.println("Robot work Complete");