Java 如何使用GeckoDriver Firefox和Selenium下载文件?

Java 如何使用GeckoDriver Firefox和Selenium下载文件?,java,firefox,selenium-webdriver,geckodriver,firefox-profile,Java,Firefox,Selenium Webdriver,Geckodriver,Firefox Profile,我使用此代码下载文件,但它不起作用 FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("browser.download.dir","D:\\WebDriverDownloads"); profile.setPreference("browser.download.folderList", 2); profile.setPreference("browser.helperApps.neverAsk.save

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

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=新的FirefoxDriver(配置文件)
然后代码成功运行,但下载文件窗口未关闭,文件也未下载

我用机器人代替这个

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

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

要下载文件,请单击文本为的链接,测试文件以下载,您需要:

  • 创建新的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();
    

@DebanjanB它给出了与图中所示相同的错误消息,在该代码中还有
WebDriver-driver=newfirefoxdriver(profile)行这就是为什么它显示错误感谢解决方案!!!它的工作。。。但是你能解释一下代码吗?我们刚刚添加了不通过FirefoxProfile显示下载弹出窗口所需的首选项,并将其烘焙到FirefoxOptions()的实例中,我们已将该实例传递到
FirefoxDriver(options)
构造函数中。是的,根据最佳实践,您需要为所需的ElementToBickable()诱导WebDriverWait。有什么特别的话要我解释吗?谢谢你的解释。。。我们使用
profile.setPreference(“browser.helperApps.neverAsk.openFile”,”此行这就是它不显示保存窗口的原因?现在更正它,此属性应该被分配一个布尔值
true
。它现在有两次,一次是MIME类型列表,一次是布尔值
true
。不管怎样,这些选项都没有帮助,只是不起作用。