1

我正在使用 selenium 框架 2.33 对网页进行测试。这里的 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”行。但尽管如此,“保存文件”对话框会弹出,并且当它在保存位置检查预期文件时测试失败。

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

编辑:格式化

4

2 回答 2

4

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

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

旧:应用程序/x-gzip 新:应用程序/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,我赞成你的评论(如果有任何意义的话)!

于 2013-06-26T11:57:54.183 回答
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");
于 2014-11-14T13:00:47.707 回答