Search code examples
javascriptseleniumscreenshot

Javascript Selenium save screenshot in a different directory


Is there a way to store a saved screenshot in a specific directory rather than the default root folder? Thanks


Solution

  • You can specify the location to save a file within fs.writeFileSync().

    For example, what you are currently doing is equivalent to:

    driver.takeScreenshot().then(function(data) {
        fs.writeFileSync('./Customer_Card.png', data, 'base64')
    })
    

    If you want to save your file somewhere else you simply have to include the path.

    Saving into a sub-directory

    const path = require('path');
    
    driver.takeScreenshot().then(function(data) {
        fs.writeFileSync(path.joing(__dirname, 'innerDir', 'Customer_Card.png'), data, 'base64')
    })
    

    The above code would save your file to Customer_Card.png inside of the innderDir directory (which would be at the same place as the file where this code is).

    So say for example I have the following project structure:

    + MyProjectDir
    +---+ savePhoto.js
    +---+ innerDir
    

    After running the above code I would have:

    + MyProjectDir
    +---+ savePhoto.js
    +---+ innerDir
    +---+---+Customer_Card.png
    

    __dirname is an environment variable that tells you the absolute path of the directory containing the currently executing file.

    Alternatively, you can use a relative path like this to get the same effect:

    driver.takeScreenshot().then(function(data) {
        fs.writeFileSync('./innerDir/Customer_Card.png', data, 'base64')
    })
    

    Saving in a parent directory

    Finally, if you want to go up a directory instead of into a directory you can do so like this:

    driver.takeScreenshot().then(function(data) {
        fs.writeFileSync('../Customer_Card.png', data, 'base64')
    })
    

    Again to clarify, If this was your project structure:

    + MyProjectDir
    +---+ innerDir
    +---+---+ savePhoto.js
    

    Then running the above code (that is in savePhoto.js) would yield:

    + MyProjectDir
    +---+ Customer_Card.png
    +---+ innerDir
    +---+---+ savePhoto.js
    

    This can be extended so that you can save your file at ./innerDir/innerDir2/Customer_Card.png or ../../../Customer_Card.png or even ../../innerDir/Customer_Card.png.