Search code examples
firefoxdownloadselenium-firefoxdriverkatalon-studiodesiredcapabilities

How to setup Firefox to download files without prompt during Katalon test execution?


I am trying to create a very simple Katalon test case that opens Firefox, goes to given URL and clicks a button to download a file. I have set up Desired Capabilities according to the Katalon documentation (https://github.com/katalon-studio/docs/blob/master/pages/katalon-studio/docs/introduction-to-desired-capabilities.md) but with no luck. When I try to download a file prompt shows up and file is not downloaded. How can I disable the prompt and download the file immediately instead?

Software versions, source code and screenshots below.

Windows 10, Katalon Studio 7.2.1, Mozilla Firefox 72.0.2, Selenium 3.141.59

import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import static com.kms.katalon.core.testobject.ObjectRepository.findWindowsObject
import com.kms.katalon.core.checkpoint.Checkpoint as Checkpoint
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.model.FailureHandling as FailureHandling
import com.kms.katalon.core.testcase.TestCase as TestCase
import com.kms.katalon.core.testdata.TestData as TestData
import com.kms.katalon.core.testobject.TestObject as TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import com.kms.katalon.core.windows.keyword.WindowsBuiltinKeywords as Windows
import internal.GlobalVariable as GlobalVariable
import org.openqa.selenium.Keys as Keys

WebUI.openBrowser('https://file-examples.com/index.php/text-files-and-archives-download/')

WebUI.click(findTestObject('downloadCsvFileButton'))

firefox_profile capabilities enter image description here


Solution

  • For Chrome the default setup of Desired Capabilities in Project Settings works fine, but for Firefox I had to do some workaround to make it work.

    So, I found this topic https://forum.katalon.com/t/opening-firefox-with-a-specific-non-anonymous-profile/12012/15 and @kazurayam 's reply helped me to create a script that initializes WebDriver which I call before each test case:

    import org.openqa.selenium.WebDriver
    import org.openqa.selenium.firefox.FirefoxDriver
    import org.openqa.selenium.firefox.FirefoxOptions
    import org.openqa.selenium.firefox.FirefoxProfile
    import org.openqa.selenium.firefox.ProfilesIni
    import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
    import com.kms.katalon.core.webui.driver.DriverFactory
    import com.kms.katalon.core.webui.driver.WebUIDriverType
    import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
    import internal.GlobalVariable as GlobalVariable
    
    WebUIDriverType executedBrowser = DriverFactory.getExecutedBrowser()
    switch(executedBrowser) {
        case WebUIDriverType.FIREFOX_DRIVER:          // "Firefox"
            System.setProperty('webdriver.gecko.driver', DriverFactory.getGeckoDriverPath())
            FirefoxOptions options = new FirefoxOptions()
    
            options.addPreference('marionette', true)
            options.addPreference('browser.download.folderList', 2)
            options.addPreference('browser.helperApps.alwaysAsk.force', false)
            options.addPreference('browser.download.manager.showWhenStarting', false)
            options.addPreference('browser.download.dir', GlobalVariable.downloadPath)
            options.addPreference('browser.download.downloadDir', GlobalVariable.downloadPath)
            options.addPreference('browser.download.defaultFolder', GlobalVariable.downloadPath)
            options.addPreference('browser.helperApps.neverAsk.saveToDisk', 'application/download, application/octet-stream, text/csv')
    
            WebDriver driver = new FirefoxDriver(options);
            // let Katalon Studio to use the WebDriver created here
            DriverFactory.changeWebDriver(driver)
            break
        default:
            WebUI.openBrowser('')
    }
    

    Note to others, if you want to download different file types you have to specify all the required the MIME types in ‘browser.helperApps.neverAsk.saveToDisk’ preference. A list of MIME types can be found here: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types

    Additionally, if the file is PDF you have to add one more preference:

    options.addPreference('pdfjs.disabled', true)