Taiko
Documentation

Home

file upload and download

Attaching files #

You can use the attach API to upload files in your test scripts as follows

const { goto, fileField, button, above, 
    attach, click, text } = require('taiko'),

(async () => {
try {
    await openBrowser();
    await goto('http://example.org/upload');
    await attach(path.join(__dirname, 'data', 'foo.txt'), 
        fileField(above(button('Upload'))));
    await click('Upload');
} catch (e) {
    console.error(e);
} finally {
    await closeBrowser();
}
})();

The code above attaches the file data/foo.txt from the current folder to a file field near a button with the name 'Upload'. You can also use the fileField API with other selectors.

Downloading files #

The following code shows how to configure a Taiko test to download files

const { goto, client, click } = require('taiko'),
path = require('path'),
fs = require('fs'),
assert = require('assert')

(async () => {
var downloadPath = path.resolve(__dirname, 'data', 'downloaded');
try {
    await openBrowser();
    await client().send('Page.setDownloadBehavior', {
    behavior: 'allow',
    downloadPath: downloadPath,
    });
    await goto('http://example.org/download');

    // ensure that file_upload.js is run before this, 
    // to allow the file to be available for download
    await click('foo.txt');
    sleep(1000);
    expect(path.join(downloadPath, 'foo.txt')).to.exist;

    assert.ok(fs.existsSync(path.join(downloadPath, 'foo.txt'))) 
} catch (e) {
    console.error(e);
} finally {
    await closeBrowser();
    if (fs.existsSync(path.join(downloadPath, 'foo.txt'))) {
    fs.unlinkSync(path.join(downloadPath, 'foo.txt'));
    }
}
})();

You can also use node's fs API to read the contents of the file and use it in your assertions.