/**
*
* Given a selector corresponding to an `` chooseFile will upload
* the local file to the browser machine and fill the form accordingly. It does not
* submit the form for you. This command only works for desktop browser.
*
*
:call.js
it('uploads a file and fills the form with it', async function () {
var toUpload = path.join(__dirname, '..', '..', 'fixtures', 'cat-to-upload.gif')
browser.chooseFile('#upload-test', toUpload)
browser.getValue('#upload-test')
expect(/cat\-to\-upload\.gif$/.test(val)).to.be.equal(true)
})
*
*
* @alias browser.chooseFile
* @param {String} selector input element
* @param {String} localPath local path to file to be uploaded
* @uses utility/uploadFile, action/addValue
* @type utility
*
*/
import fs from 'fs'
import { CommandError } from '../utils/ErrorHandler'
let chooseFile = function (selector, localPath) {
/*!
* parameter check
*/
if (typeof localPath !== 'string') {
return new CommandError('number or type of arguments don\'t agree with chooseFile command')
}
/*!
* mobile check
*/
if (this.isMobile) {
return new CommandError('chooseFile command is not supported on mobile platforms')
}
return new Promise((resolve, reject) => {
fs.stat(localPath, (err) => {
/* istanbul ignore next */
if (err) {
return reject(new CommandError('File to upload does not exists on your system'))
}
this.uploadFile(localPath).then(function (res) {
return this.addValue(selector, res.value)
}).then(resolve, reject)
})
})
}
export default chooseFile