multipart.spec.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var test = require('tape')
  2. var path = require('path')
  3. var chalk = require('chalk')
  4. var Driver = require('./Driver')
  5. var collectErrors = Driver.collectErrors
  6. module.exports = function (driver, platform, host) {
  7. var testName = 'Multipart: upload two files'
  8. var platformName = chalk.underline.yellow('[' +
  9. platform.os + ' ' +
  10. platform.browser + ' ' +
  11. platform.version +
  12. ']')
  13. test(testName + ' ' + platformName, function (t) {
  14. t.plan(1)
  15. // Go to the example URL
  16. driver.get(host + '/examples/multipart/')
  17. driver.manage().window().maximize()
  18. // TODO: figure out how to properly mark tests as complete in Saucelabs
  19. // driver.executeScript('sauce:jpassed=true)
  20. // driver.executeScript('sauce:jpassed=false)
  21. // Set Saucelabs test name
  22. driver.executeScript('sauce:job-name=' + testName).catch(function (err) {
  23. console.log('local test, so this is ok: ' + err)
  24. })
  25. // driver.manage().timeouts().implicitlyWait(5 * 1000)
  26. // If this is Edge or Safari, fake upload a dummy file object
  27. var platformBrowser = platform.browser.toLowerCase()
  28. if (platformBrowser === 'safari' || platformBrowser === 'microsoftedge') {
  29. console.log('fake-selecting a fake file')
  30. driver.executeScript(Driver.UppySelectFakeFile)
  31. driver.findElement({css: '.UppyForm-uploadBtn'}).click()
  32. } else {
  33. // Find input by css selector & pass absolute image path to it
  34. console.log('selecting a real file')
  35. driver.findElement({css: '.UppyFormContainer .UppyForm-input'}).then(function (el) {
  36. el.sendKeys(path.join(__dirname, 'image.jpg'))
  37. el.sendKeys(path.join(__dirname, 'image2.jpg'))
  38. driver.findElement({css: '.UppyForm-uploadBtn'}).click()
  39. })
  40. }
  41. function isUploaded () {
  42. // .getText() only works on visible elements, so we use .getAttribute('textContent'), go figure
  43. // http://stackoverflow.com/questions/21994261/gettext-not-working-on-a-select-from-dropdown
  44. return driver.findElement({css: '.UppyProgressBar .UppyProgressBar-percentage'})
  45. .getAttribute('textContent')
  46. .then(function (value) {
  47. var progress = parseInt(value)
  48. var isFileUploaded = progress === 100
  49. return isFileUploaded
  50. })
  51. }
  52. driver.wait(isUploaded, 15000, 'File image.jpg should be uploaded within 15 seconds')
  53. .then(function (result) {
  54. collectErrors(driver).then(function () {
  55. t.equal(result, true)
  56. driver.quit()
  57. })
  58. })
  59. .catch(function (err) {
  60. collectErrors(driver).then(function () {
  61. t.fail(err)
  62. driver.quit()
  63. })
  64. })
  65. })
  66. }