【问题标题】:File download using selenium使用 selenium 下载文件
【发布时间】:2013-11-12 17:57:14
【问题描述】:

我正在使用 selenium 来测试系统。 我必须下载一个文本文件。为了直接下载它,我创建了一个 Firefox 配置文件,它应该避免出现Save / cancel 对话框...但对话框仍然存在。

我的代码如下:

FirefoxProfile fxProfile = new FirefoxProfile();
fxProfile.setPreference("browser.download.folderList",2);
fxProfile.setPreference("browser.download.manager.showWhenStarting",false);
fxProfile.setPreference("browser.download.dir","c:\\tmp");
fxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);
fxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/plain");
driver.findElement(By.id("link-download")).click();

我找不到对话框仍然打开的原因。 有什么想法吗?

提前致谢。

【问题讨论】:

  • 我想知道这是否取决于浏览器版本。或者类似的东西?可能是 Firefox 的老版本?
  • 你的浏览器曾经打开过吗?
  • 我猜这是您设置的最后一个首选项。你确定text/plain是下载的MIME类型吗?
  • 嗯。你说的对。 mime 类型是 application/octet-stream。感谢 Mrti 指出这一点!但是将其更改为这种 mime 类型并没有改变任何东西......
  • @Adel:不,它是 Firefox 的最后一个版本。

标签: java firefox selenium selenium-webdriver


【解决方案1】:

您可以下载所有文件(例如:.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");

【讨论】:

    【解决方案2】:

    在我的情况下,我需要另一个 Preference 才能使其正常工作,启用 Javascript 也很有趣。

    File downloadDir = new File(DOWNLOAD_PATH);
    FirefoxProfile fProfile = new FirefoxProfile();
    fProfile.setAcceptUntrustedCertificates(true);
    fProfile.setPreference("browser.download.dir", downloadDir.getAbsolutePath());
    fProfile.setPreference("browser.download.folderList", 2);
    fProfile.setPreference("browser.download.manager.showWhenStarting", false);
    fProfile.setPreference("browser.helperApps.alwaysAsk.force", false);
    fProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/plain");
    DesiredCapabilities dc = DesiredCapabilities.firefox();
    dc.setJavascriptEnabled(true);
    dc.setCapability(FirefoxDriver.PROFILE, fProfile);
    driver = new FirefoxDriver(dc);
    

    【讨论】:

      【解决方案3】:

      我明白了。

      在创建驱动程序时,Firefox 配置文件必须作为参数传递,如下所示:

      FirefoxProfile fxProfile = new FirefoxProfile();
      
          fxProfile.setPreference("browser.download.folderList", 2);
          fxProfile.setPreference("browser.download.manager.showWhenStarting", false);
          fxProfile.setPreference("browser.download.dir","c:\\tmp");
          fxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);
          fxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
      
          setDriver(TestBench.createDriver(new FirefoxDriver(fxProfile)));
      

      我正在创建没有参数的驱动程序。现在它正在工作。

      【讨论】:

      猜你喜欢
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2017-06-01
      • 2021-08-19
      相关资源
      最近更新 更多