【问题标题】:How to download files using GeckoDriver Firefox and Selenium?如何使用 GeckoDriver Firefox 和 Selenium 下载文件?
【发布时间】:2019-08-30 14:59:32
【问题描述】:

我使用此代码下载文件,但它不起作用

FirefoxProfile profile = new FirefoxProfile();

profile.setPreference("browser.download.dir","D:\\WebDriverDownloads");
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;"); 
profile.setPreference( "browser.download.manager.showWhenStarting",false );
profile.setPreference( "pdfjs.disabled",true );


FirefoxDriver driver = new FirefoxDriver(profile);  //Shows error on this line

driver.get("http://toolsqa.com/automation-practice-form/");

driver.findElement(By.linkText("Test File to Download")).click();

Thread.sleep(5000);

它给了我错误

当我删除时

'个人资料'

形成这个FirefoxDriver driver = new FirefoxDriver(profile); 然后代码运行成功,但下载文件窗口没有关闭,文件也没有下载。

我用机器人代替这个

Robot object=new Robot();
object.keyPress(KeyEvent.VK_DOWN);
object.keyRelease(KeyEvent.VK_DOWN);         
object.keyPress(KeyEvent.VK_ENTER);
object.keyRelease(KeyEvent.VK_ENTER);

它工作正常。但是为什么我上面的代码不起作用?

【问题讨论】:

  • @DebanjanB 它给出了与图像相同的错误消息,在此代码中也有 WebDriver driver = new FirefoxDriver(profile); 行,这就是它显示错误的原因

标签: java firefox selenium-webdriver geckodriver firefox-profile


【解决方案1】:

要下载文件,点击链接,文本为Test File to Download,您需要:

  • 创建一个新的 FirefoxProfile() 并设置所需的首选项。
  • 使用FirefoxOptions()的实例设置配置文件
  • 您可以使用以下解决方案:

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("browser.download.dir", "C:\\Utility\\Downloads");
    profile.setPreference("browser.download.folderList",2);
    profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    profile.setPreference("browser.download.manager.showWhenStarting", false);
    profile.setPreference("browser.helperApps.neverAsk.openFile","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    profile.setPreference("browser.helperApps.alwaysAsk.force", false);
    profile.setPreference("browser.download.manager.useWindow", false);
    profile.setPreference("browser.download.manager.focusWhenStarting", false);
    profile.setPreference("browser.download.manager.showAlertOnComplete", false);
    profile.setPreference("browser.download.manager.closeWhenDone", true);
    FirefoxOptions options = new FirefoxOptions();
    options.setProfile(profile);
    WebDriver driver = new FirefoxDriver(options);
    driver.get("http://toolsqa.com/automation-practice-form/");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Test File to Download"))).click();
    

【讨论】:

  • 感谢您的解决方案!!!它的工作......但你能稍微解释一下代码吗?
  • 我们刚刚添加了所需的 preference 不通过 FirefoxProfile 显示下载弹出窗口并将其烘焙到 FirefoxOptions( ) 我们已将其传递给FirefoxDriver(options) 构造函数。是的,根据最佳实践,您需要为所需的 elementToBeClickable() 诱导 WebDriverWait。你想让我解释一下具体的行吗?
  • 感谢您的解释...我们使用profile.setPreference("browser.helperApps.neverAsk.openFile", "");这一行这就是为什么它不显示保存窗口?
  • 现在更正了,这个属性应该被分配一个布尔值true
  • 现在出现了两次,一次是 MIME 类型列表,一次是布尔值 true。无论哪种方式,这些选项都无济于事,而且根本不起作用。
猜你喜欢
  • 1970-01-01
  • 2021-07-26
  • 2015-11-23
  • 1970-01-01
  • 2021-04-15
  • 2018-01-13
  • 1970-01-01
  • 2019-02-05
  • 2020-09-12
相关资源
最近更新 更多