Переглянути джерело

Refactor tests, make a special case for Safari and Edge

Artur Paikin 9 роки тому
батько
коміт
ac74c6ab93

+ 10 - 0
test/acceptance/Driver.js

@@ -4,6 +4,15 @@ var By = webdriver.By
 var path = require('path')
 var path = require('path')
 var chalk = require('chalk')
 var chalk = require('chalk')
 
 
+function UppySelectFakeFile () {
+  var blob = new Blob(
+    ['data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTIwIDEyMCI+CiAgPGNpcmNsZSBjeD0iNjAiIGN5PSI2MCIgcj0iNTAiLz4KPC9zdmc+Cg=='],
+    {type: 'image/svg+xml'}
+  )
+  blob['name'] = 'myDumbSVG'
+  window.UppyAddFiles([blob], 'smth')
+}
+
 // Monitor for errors, and dump them
 // Monitor for errors, and dump them
 function collectErrors (driver) {
 function collectErrors (driver) {
   return driver.executeScript('return uppyLog;')
   return driver.executeScript('return uppyLog;')
@@ -49,6 +58,7 @@ function setDriver () {
 
 
 module.exports = {
 module.exports = {
   setDriver,
   setDriver,
+  UppySelectFakeFile,
   collectErrors,
   collectErrors,
   By
   By
 }
 }

+ 13 - 7
test/acceptance/dragdrop.spec.js

@@ -17,13 +17,19 @@ module.exports = function (driver, platform, host) {
     // Go to the example URL
     // Go to the example URL
     driver.get(host + '/examples/dragdrop/')
     driver.get(host + '/examples/dragdrop/')
 
 
-    // Make file input “visible”
-    driver.executeScript('document.querySelector(".UppyDragDrop-One .UppyDragDrop-input").style.opacity = 1')
-
-    // Find input by css selector & pass absolute image path to it
-    driver
-      .findElement({css: '.UppyDragDrop-One .UppyDragDrop-input'})
-      .sendKeys(path.join(__dirname, 'image.jpg'))
+    var platformBrowser = platform.browser.toLowerCase()
+    if (platformBrowser === 'safari' || platformBrowser === 'microsoftedge') {
+      console.log('fake-selecting a fake file')
+      driver.executeScript(Driver.UppySelectFakeFile)
+    } else {
+      console.log('selecting a real file')
+      // Make file input “visible”
+      driver.executeScript('document.querySelector(".UppyDragDrop-One .UppyDragDrop-input").style.opacity = 1')
+      // Find input by css selector & pass absolute image path to it
+      driver
+        .findElement({css: '.UppyDragDrop-One .UppyDragDrop-input'})
+        .sendKeys(path.join(__dirname, 'image.jpg'))
+    }
 
 
     function isUploaded () {
     function isUploaded () {
       // return driver.findElement(By.id('console-log'))
       // return driver.findElement(By.id('console-log'))

+ 10 - 7
test/acceptance/index.js

@@ -18,21 +18,24 @@ var remote = require('selenium-webdriver/remote')
 var username = process.env.SAUCELABS_USERNAME
 var username = process.env.SAUCELABS_USERNAME
 var accessKey = process.env.SAUCELABS_ACCESS_KEY
 var accessKey = process.env.SAUCELABS_ACCESS_KEY
 
 
+var remoteHost = 'http://b0c83b21.ngrok.io'
+var localHost = 'http://localhost:4000'
+
 // if accessKey is supplied as env variable, this is a remote Saucelabs test
 // if accessKey is supplied as env variable, this is a remote Saucelabs test
 var isRemoteTest = accessKey ? true : ''
 var isRemoteTest = accessKey ? true : ''
-var host = isRemoteTest ? 'http://uppy.io' : 'http://localhost:4000'
+var host = isRemoteTest ? remoteHost : localHost
 
 
 // FYI: old Chrome on Windows XP,
 // FYI: old Chrome on Windows XP,
 // Opera 12 on Linux — didn’t pass
 // Opera 12 on Linux — didn’t pass
 var platforms = [
 var platforms = [
-  // { browser: 'Safari', version: '8.0', os: 'OS X 10.10' },
-  // { browser: 'MicrosoftEdge', version: '13.10586', os: 'Windows 10' },
+  // { browser: 'Safari', version: '9.0', os: 'OS X 10.11' }
+  // { browser: 'MicrosoftEdge', version: '13.10586', os: 'Windows 10' }
+  { browser: 'Firefox', version: '38.0', os: 'Linux' },
   { browser: 'Internet Explorer', version: '10.0', os: 'Windows 8' },
   { browser: 'Internet Explorer', version: '10.0', os: 'Windows 8' },
   { browser: 'Internet Explorer', version: '11.103', os: 'Windows 10' },
   { browser: 'Internet Explorer', version: '11.103', os: 'Windows 10' },
-  { browser: 'Opera', version: '12.15', os: 'Linux' },
-  { browser: 'Firefox', version: '38.0', os: 'Linux' },
-  { browser: 'Firefox', version: '34.0', os: 'Windows 7' },
-  { browser: 'Chrome', version: '48.0', os: 'Windows XP' }
+  { browser: 'Chrome', version: '48.0', os: 'Windows XP' },
+  { browser: 'Firefox', version: '34.0', os: 'Windows 7' }
+  // { browser: 'Opera', version: '12.15', os: 'Linux' }
 ]
 ]
 
 
 var tests = [
 var tests = [

+ 18 - 6
test/acceptance/multipart.spec.js

@@ -19,12 +19,24 @@ module.exports = function (driver, platform, host) {
 
 
     // driver.manage().timeouts().implicitlyWait(5 * 1000)
     // driver.manage().timeouts().implicitlyWait(5 * 1000)
 
 
-    // Find input by css selector & pass absolute image path to it
-    driver.findElement({css: '.UppyFormContainer .UppyForm-input'}).then(function (el) {
-      el.sendKeys(path.join(__dirname, 'image.jpg'))
-      el.sendKeys(path.join(__dirname, 'image2.jpg'))
-      driver.findElement({css: '.UppyForm-uploadBtn'}).click()
-    })
+    // If this is Edge or Safari, fake upload a dummy file object
+    var platformBrowser = platform.browser.toLowerCase()
+    if (platformBrowser === 'safari' || platformBrowser === 'microsoftedge') {
+      console.log('fake-selecting a fake file')
+      // driver.executeScript(Driver.UppySelectFakeFile)
+      driver.executeScript(Driver.UppySelectFakeFile).then(function (result) {
+        console.log(result)
+        driver.findElement({css: '.UppyForm-uploadBtn'}).click()
+      })
+    } else {
+      // Find input by css selector & pass absolute image path to it
+      console.log('selecting a real file')
+      driver.findElement({css: '.UppyFormContainer .UppyForm-input'}).then(function (el) {
+        el.sendKeys(path.join(__dirname, 'image.jpg'))
+        el.sendKeys(path.join(__dirname, 'image2.jpg'))
+        driver.findElement({css: '.UppyForm-uploadBtn'}).click()
+      })
+    }
 
 
     function isUploaded () {
     function isUploaded () {
       // .getText() only works on visible elements, so we use .getAttribute('textContent'), go figure
       // .getText() only works on visible elements, so we use .getAttribute('textContent'), go figure

+ 4 - 1
test/acceptance/saucelabs-dummy.spec.js

@@ -27,7 +27,10 @@ function buildDriver (platform) {
 function runTest (driver, platform) {
 function runTest (driver, platform) {
   console.log('Running dummy test in ' + platform.browser + ' on ' + platform.os)
   console.log('Running dummy test in ' + platform.browser + ' on ' + platform.os)
   driver.get('http://ya.ru')
   driver.get('http://ya.ru')
-  return driver.getTitle().then(function (title) {
+  driver.executeScript('return window').then(function (log) {
+    console.log(log)
+  })
+  driver.getTitle().then(function (title) {
     console.log('title is: ' + title)
     console.log('title is: ' + title)
     console.log('Finnished running dummy test, I quit!')
     console.log('Finnished running dummy test, I quit!')
     driver.quit()
     driver.quit()