Driver.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. var webdriver = require('selenium-webdriver')
  2. var firefox = require('selenium-webdriver/firefox')
  3. var By = webdriver.By
  4. var path = require('path')
  5. var chalk = require('chalk')
  6. function uppySelectFakeFile () {
  7. var blob = new Blob(
  8. ['data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTIwIDEyMCI+CiAgPGNpcmNsZSBjeD0iNjAiIGN5PSI2MCIgcj0iNTAiLz4KPC9zdmc+Cg=='],
  9. {type: 'image/svg+xml'}
  10. )
  11. window.UppyAddFile({
  12. source: 'acceptance-test',
  13. name: 'test-file',
  14. type: 'image/svg+xml',
  15. data: blob
  16. })
  17. }
  18. // https://wiki.saucelabs.com/display/DOCS/Annotating+Tests+with+Selenium's+JavaScript+Executor
  19. function setSauceTestStatus (driver, passed) {
  20. driver
  21. .executeScript('sauce:job-result=' + passed)
  22. .catch(function (err) {
  23. console.log('local test, so this is ok: ' + err)
  24. })
  25. }
  26. function setSauceTestName (driver, testName) {
  27. driver
  28. .executeScript('sauce:job-name=' + testName)
  29. .catch(function (err) {
  30. console.log('local test, so this is ok: ' + err)
  31. })
  32. }
  33. function testEqual (driver, t, condition) {
  34. t.equal(condition, true)
  35. if (condition) {
  36. setSauceTestStatus(driver, true)
  37. } else {
  38. setSauceTestStatus(driver, false)
  39. }
  40. }
  41. function testFail (driver, t, err) {
  42. t.fail(err)
  43. setSauceTestStatus(driver, false)
  44. }
  45. // Monitor for errors, and dump them
  46. function collectErrors (driver) {
  47. return driver.executeScript('return uppyLog;')
  48. .then(function (uppyLog) {
  49. console.error([
  50. '[uppy-log]',
  51. chalk.magenta(uppyLog)
  52. ].join(' '))
  53. })
  54. .catch(function (err) {
  55. console.log('no uppyLog, that’s fine: ' + err)
  56. })
  57. // TODO: maybe figure out a way to get errors from all browsers
  58. // return driver.executeScript('return window.JSErrorCollector_errors.pump()')
  59. // .then(function (errors) {
  60. // if (!errors || !errors.length) {
  61. // return
  62. // }
  63. // errors.forEach(function (error) {
  64. // console.error([
  65. // '[browser-error]',
  66. // chalk.magenta(error.sourceName),
  67. // chalk.dim('#' + error.lineNumber),
  68. // chalk.red(error.errorMessage)
  69. // ].join(' '))
  70. // })
  71. // return
  72. // })
  73. }
  74. function setDriver () {
  75. var profile = new firefox.Profile()
  76. profile.addExtension(path.join(__dirname, 'xpi', 'firebug-2.0.16.xpi'))
  77. profile.addExtension(path.join(__dirname, 'xpi', 'JSErrorCollector.xpi'))
  78. profile.setPreference('extensions.firebug.showChromeErrors', true)
  79. var options = new firefox.Options().setProfile(profile)
  80. var driver = new firefox.Driver(options)
  81. // var driver = new webdriver.Builder()
  82. // .forBrowser('firefox')
  83. // .build()
  84. return driver
  85. }
  86. module.exports = {
  87. setDriver,
  88. uppySelectFakeFile,
  89. collectErrors,
  90. testEqual,
  91. testFail,
  92. setSauceTestName,
  93. setSauceTestStatus,
  94. By
  95. }