cross-tester
Advanced tools
Comparing version
@@ -107,4 +107,13 @@ 'use strict'; | ||
var browser = _ref2.browser; | ||
var browserName = browser.displayName; | ||
function print(message) { | ||
return (0, _promisesUtil.andReturn)(function () { | ||
return Promise.resolve(verbose ? console.log(browserName + ' - ' + message) : 0); | ||
}); | ||
} | ||
return function () { | ||
return Promise.resolve().then(print('starting testing session in browser ' + browser.displayName)).then(test.enter()).then(print('connected')) | ||
return Promise.resolve().then(print('starting')).then(test.enter()).then(print('connected')) | ||
// we need very simple page always available online | ||
@@ -121,3 +130,3 @@ .then(test.open('about:blank')).then(test.execute(code)).then(print('code executed')) | ||
return { | ||
browser: browser.displayName, | ||
browser: browserName, | ||
results: results, | ||
@@ -133,3 +142,3 @@ logs: logs | ||
return { | ||
browser: browser.displayName, | ||
browser: browserName, | ||
results: [{ | ||
@@ -141,3 +150,3 @@ type: 'FAIL', | ||
}; | ||
}).then(print('testing session in browser ' + browser.displayName + ' finished')); | ||
}).then(print('finished')); | ||
}; | ||
@@ -162,8 +171,2 @@ }); | ||
}); | ||
function print(message) { | ||
return (0, _promisesUtil.andReturn)(function () { | ||
return Promise.resolve(verbose ? console.log(message) : 0); | ||
}); | ||
} | ||
} |
@@ -27,2 +27,10 @@ 'use strict'; | ||
var _systemBrowsers = require('../system-browsers'); | ||
var osVersionForBrowser = _interopRequireWildcard(_systemBrowsers); | ||
var _osxVersions = require('../osx-versions'); | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -270,5 +278,10 @@ | ||
// ex. MS Edge likes return arrays as object with numeric keys | ||
// on the other hand, strngification fails in IE 9, so we need a fallback | ||
return function () { | ||
return driver.executeScript('return JSON.stringify(' + RESULTS_ARRAY_NAME + ');').then(function (json) { | ||
return JSON.parse(json); | ||
return driver.executeScript('try {\n return JSON.stringify(' + RESULTS_ARRAY_NAME + ');\n } catch(err) {\n return ' + RESULTS_ARRAY_NAME + ';\n }').then(function (jsonOrNot) { | ||
try { | ||
return JSON.parse(jsonOrNot); | ||
} catch (err) { | ||
return jsonOrNot; | ||
} | ||
}); | ||
@@ -364,12 +377,3 @@ }; | ||
var osVersion = (({ | ||
'OS X': { | ||
'10.6': 'Snow Leopard', | ||
'10.7': 'Lion', | ||
'10.8': 'Mountain Lion', | ||
'10.9': 'Mavericks', | ||
'10.10': 'Yosemite', | ||
'10.11': 'El Capitan' | ||
} | ||
})[osName] || {})[browser.osVersion.toLowerCase()] || browser.osVersion; | ||
var osVersion = osName === 'MAC' ? _osxVersions.numberToName[browser.osVersion.toLowerCase()] : browser.osVersion; | ||
@@ -379,2 +383,3 @@ var appium = false; | ||
if (browserName === 'Safari' && ['iphone', 'ipad'].indexOf((deviceName || '').split(' ')[0]) !== -1) { | ||
// Safari on iOS | ||
browserName = 'iPad'; | ||
@@ -407,2 +412,3 @@ appium = true; | ||
} else if (browserName === 'Android') { | ||
// Android Browser | ||
appium = true; | ||
@@ -427,2 +433,17 @@ | ||
if (!osVersion) { | ||
if (osName === 'Windows' && browserName === 'Internet Explorer') { | ||
osVersion = osVersionForBrowser.ie[browser.version]; | ||
} | ||
if (osName === 'Windows' && browserName === 'MicrosoftEdge') { | ||
osVersion = osVersionForBrowser.edge[browser.version]; | ||
} | ||
if (osName === 'OS X' && browserName === 'Safari') { | ||
osVersion = osVersionForBrowser.safari[browser.version]; | ||
osVersion = _osxVersions.numberToName[osVersion] || osVersion; | ||
} | ||
} | ||
var config = { | ||
@@ -429,0 +450,0 @@ name: 'CrossTester - ' + displayName |
@@ -25,2 +25,10 @@ 'use strict'; | ||
var _lodash = require('lodash'); | ||
var _systemBrowsers = require('../system-browsers'); | ||
var osVersionForBrowser = _interopRequireWildcard(_systemBrowsers); | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -76,3 +84,3 @@ | ||
var DEFAULT_TIMEOUT = 60 * 1000; | ||
var DEFAULT_TIMEOUT = 300 * 1000; | ||
var chromeLogMessagePattern = /^(javascript|(?:(?:https?|chrome-extension)\:\/\/\S+))\s+(\d+:\d+)\s+(.*)$/i; | ||
@@ -262,5 +270,10 @@ var firefoxAddonLogPattern = /^(\d{13})\t(\S*(?:addons|extensions)\S*)\t([A-Z]+)\t(.*)\n?$/i; | ||
// ex. MS Edge likes return arrays as object with numeric keys | ||
// on the other hand, strngification fails in IE 9, so we need a fallback | ||
return function () { | ||
return driver.execute('return JSON.stringify(' + RESULTS_ARRAY_NAME + ');').then(function (json) { | ||
return JSON.parse(json); | ||
return driver.execute('try {\n return JSON.stringify(' + RESULTS_ARRAY_NAME + ');\n } catch(err) {\n return ' + RESULTS_ARRAY_NAME + ';\n }').then(function (jsonOrNot) { | ||
try { | ||
return JSON.parse(jsonOrNot); | ||
} catch (err) { | ||
return jsonOrNot; | ||
} | ||
}); | ||
@@ -334,7 +347,19 @@ }; | ||
'mozilla firefox': 'firefox', | ||
'ff': 'firefox' | ||
'ff': 'firefox', | ||
'apple safari': 'Safari', | ||
'ios safari': 'Safari', | ||
'safari mobile': 'Safari', | ||
'iphone': 'Safari', | ||
'ipad': 'Safari', | ||
'android browser': 'Android' | ||
})[browser.name.toLowerCase()] || browser.name; | ||
var osName = ({ | ||
'mac': 'OS X' | ||
'win': 'Windows', | ||
'windows': 'Windows', | ||
'mac': 'OS X', | ||
'os x': 'OS X', | ||
'ios': 'iOS', | ||
'android': 'Android', | ||
'linux': 'Linux' | ||
})[browser.os.toLowerCase()] || browser.os; | ||
@@ -353,9 +378,97 @@ | ||
return { | ||
name: 'CrossTester - ' + displayName, | ||
browserName: browserName, | ||
version: browser.version, | ||
platform: osName + (browser.hasOwnProperty('osVersion') && 'undefined' !== typeof osVersion ? ' ' + osVersion : ''), | ||
device: browser.device | ||
var appium = false; | ||
var appiumLegacy = false; | ||
var deviceName = (browser.device || '').toLowerCase(); | ||
if (browserName === 'Safari' && ['iphone', 'ipad'].indexOf((deviceName || '').split(' ')[0]) !== -1) { | ||
// Safari on iOS | ||
osName = 'iOS'; | ||
appium = true; | ||
if (deviceName === 'iphone') { | ||
deviceName = 'iPhone Simulator'; | ||
} | ||
if (deviceName === 'ipad') { | ||
deviceName = 'iPad Simulator'; | ||
} | ||
} else if (browserName === 'Android') { | ||
// Android Browser | ||
osName = 'Android'; | ||
appium = true; | ||
// find device based on OS version | ||
if (!deviceName) { | ||
deviceName = 'Android Emulator'; | ||
} | ||
if (!osVersion) { | ||
osVersion = browser.version; | ||
} | ||
if (isNaN(parseFloat(osVersion, 10))) { | ||
// find numeric version by name | ||
osVersion = ({ | ||
'lolipop': '5.1', | ||
'kitkat': '4.4', | ||
'jelly bean': '4.3', | ||
'ice cream sandwich': '4.0' | ||
})[osVersion.toLowerCase()]; | ||
} | ||
// for some reason platform is different for older Androids | ||
if (parseFloat(osVersion, 10) < 4.4) { | ||
appiumLegacy = true; | ||
} else { | ||
browserName = 'Browser'; | ||
} | ||
} | ||
var config = { | ||
name: 'CrossTester - ' + displayName | ||
}; | ||
if (!osVersion) { | ||
if (osName === 'Windows' && browserName === 'Internet Explorer') { | ||
osVersion = osVersionForBrowser.ie[browser.version]; | ||
} | ||
if (osName === 'Windows' && browserName === 'MicrosoftEdge') { | ||
osVersion = osVersionForBrowser.edge[browser.version]; | ||
} | ||
if (osName === 'OS X' && browserName === 'Safari') { | ||
osVersion = osVersionForBrowser.safari[browser.version]; | ||
} | ||
} | ||
if (appium) { | ||
(0, _lodash.assign)(config, { | ||
browserName: browserName, | ||
deviceOrientation: 'portrait', | ||
deviceName: deviceName | ||
}); | ||
if (appiumLegacy) { | ||
(0, _lodash.assign)(config, { | ||
platform: 'Linux', | ||
version: osVersion | ||
}); | ||
} else { | ||
(0, _lodash.assign)(config, { | ||
platformName: osName, | ||
platformVersion: osVersion, | ||
appiumVersion: '1.4.16' | ||
}); | ||
} | ||
} else { | ||
(0, _lodash.assign)(config, { | ||
browserName: browserName, | ||
version: browser.version, | ||
platform: osName + (osVersion ? ' ' + osVersion : '') | ||
}); | ||
} | ||
console.log(config); | ||
return config; | ||
} |
@@ -27,4 +27,3 @@ #!/usr/bin/env node | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -36,4 +35,3 @@ 'Mozilla Firefox': { | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -43,6 +41,7 @@ 'Microsoft Internet Explorer': { | ||
versions: { | ||
latest: '11' | ||
latest: '11', | ||
previous: '10', | ||
old: '9' | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -52,6 +51,7 @@ 'Apple Safari': { | ||
versions: { | ||
latest: '9' | ||
latest: '9', | ||
previous: '8', | ||
old: '7' | ||
}, | ||
os: 'OS X', | ||
osVersion: '10.11' | ||
os: 'OS X' | ||
}, | ||
@@ -64,4 +64,3 @@ 'Microsoft Edge': { | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -85,8 +84,4 @@ 'Safari Mobile': { | ||
versions: { | ||
'Lollipop': { | ||
osVersion: '5.0' | ||
}, | ||
'Kitkat': { | ||
osVersion: 'KitKat' | ||
} | ||
'Lollipop': '5.0', | ||
'Jelly Bean': 'Jelly Bean' | ||
} | ||
@@ -93,0 +88,0 @@ } |
{ | ||
"name": "cross-tester", | ||
"version": "3.0.0", | ||
"version": "3.1.0", | ||
"description": "Utility for automated cross-browser testing with SauceLabs", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -82,6 +82,12 @@ import { | ||
}) | ||
.map(({ test, browser }) => | ||
() => | ||
.map(({ test, browser }) => { | ||
const browserName = browser.displayName; | ||
function print(message) { | ||
return andReturn(() => Promise.resolve(verbose ? console.log(`${browserName} - ${message}`) : 0)); | ||
} | ||
return () => | ||
Promise.resolve() | ||
.then(print(`starting testing session in browser ${browser.displayName}`)) | ||
.then(print('starting')) | ||
.then(test.enter()) | ||
@@ -103,3 +109,3 @@ .then(print('connected')) | ||
]).then(([results, logs]) => ({ | ||
browser: browser.displayName, | ||
browser: browserName, | ||
results, | ||
@@ -117,3 +123,3 @@ logs | ||
return { | ||
browser: browser.displayName, | ||
browser: browserName, | ||
results: [{ | ||
@@ -126,4 +132,4 @@ type: 'FAIL', | ||
}) | ||
.then(print(`testing session in browser ${browser.displayName} finished`)) | ||
); | ||
.then(print('finished')); | ||
}); | ||
@@ -141,7 +147,2 @@ // run all tests with some concurrency | ||
); | ||
function print(message) { | ||
return andReturn(() => Promise.resolve(verbose ? console.log(message) : 0)); | ||
} | ||
} |
@@ -7,2 +7,4 @@ import webdriver from 'browserstack-webdriver'; | ||
import { assign } from 'lodash'; | ||
import * as osVersionForBrowser from '../system-browsers'; | ||
import { numberToName as osxVersions } from '../osx-versions'; | ||
@@ -318,4 +320,15 @@ | ||
// ex. MS Edge likes return arrays as object with numeric keys | ||
return () => driver.executeScript(`return JSON.stringify(${RESULTS_ARRAY_NAME});`) | ||
.then((json) => JSON.parse(json)); | ||
// on the other hand, strngification fails in IE 9, so we need a fallback | ||
return () => driver.executeScript(`try { | ||
return JSON.stringify(${RESULTS_ARRAY_NAME}); | ||
} catch(err) { | ||
return ${RESULTS_ARRAY_NAME}; | ||
}`) | ||
.then((jsonOrNot) => { | ||
try { | ||
return JSON.parse(jsonOrNot); | ||
} catch(err) { | ||
return jsonOrNot; | ||
} | ||
}); | ||
} | ||
@@ -412,12 +425,5 @@ | ||
const osVersion = (({ | ||
'OS X': { | ||
'10.6': 'Snow Leopard', | ||
'10.7': 'Lion', | ||
'10.8': 'Mountain Lion', | ||
'10.9': 'Mavericks', | ||
'10.10': 'Yosemite', | ||
'10.11': 'El Capitan' | ||
} | ||
})[osName] || {})[browser.osVersion.toLowerCase()] || browser.osVersion; | ||
let osVersion = osName === 'MAC' ? | ||
osxVersions[browser.osVersion.toLowerCase()] : | ||
browser.osVersion; | ||
@@ -427,2 +433,3 @@ let appium = false; | ||
if ((browserName === 'Safari') && (['iphone', 'ipad'].indexOf((deviceName || '').split(' ')[0]) !== -1)) { | ||
// Safari on iOS | ||
browserName = 'iPad'; | ||
@@ -455,2 +462,3 @@ appium = true; | ||
} else if (browserName === 'Android') { | ||
// Android Browser | ||
appium = true; | ||
@@ -475,2 +483,17 @@ | ||
if (!osVersion) { | ||
if ((osName === 'Windows') && (browserName === 'Internet Explorer')) { | ||
osVersion = osVersionForBrowser.ie[browser.version]; | ||
} | ||
if ((osName === 'Windows') && (browserName === 'MicrosoftEdge')) { | ||
osVersion = osVersionForBrowser.edge[browser.version]; | ||
} | ||
if ((osName === 'OS X') && (browserName === 'Safari')) { | ||
osVersion = osVersionForBrowser.safari[browser.version]; | ||
osVersion = osxVersions[osVersion] || osVersion; | ||
} | ||
} | ||
const config = { | ||
@@ -477,0 +500,0 @@ name: `CrossTester - ${displayName}` |
@@ -6,2 +6,4 @@ import webdriver from 'wd'; | ||
import request from 'request-promise'; | ||
import { assign } from 'lodash'; | ||
import * as osVersionForBrowser from '../system-browsers'; | ||
@@ -111,3 +113,3 @@ | ||
const DEFAULT_TIMEOUT = 60 * 1000; | ||
const DEFAULT_TIMEOUT = 300 * 1000; | ||
const chromeLogMessagePattern = /^(javascript|(?:(?:https?|chrome-extension)\:\/\/\S+))\s+(\d+:\d+)\s+(.*)$/i; | ||
@@ -307,4 +309,15 @@ const firefoxAddonLogPattern = /^(\d{13})\t(\S*(?:addons|extensions)\S*)\t([A-Z]+)\t(.*)\n?$/i; | ||
// ex. MS Edge likes return arrays as object with numeric keys | ||
return () => driver.execute(`return JSON.stringify(${RESULTS_ARRAY_NAME});`) | ||
.then((json) => JSON.parse(json)); | ||
// on the other hand, strngification fails in IE 9, so we need a fallback | ||
return () => driver.execute(`try { | ||
return JSON.stringify(${RESULTS_ARRAY_NAME}); | ||
} catch(err) { | ||
return ${RESULTS_ARRAY_NAME}; | ||
}`) | ||
.then((jsonOrNot) => { | ||
try { | ||
return JSON.parse(jsonOrNot); | ||
} catch(err) { | ||
return jsonOrNot; | ||
} | ||
}); | ||
} | ||
@@ -373,3 +386,3 @@ | ||
export function parseBrowser(browser, displayName) { | ||
const browserName = ({ | ||
let browserName = ({ | ||
'microsoft edge': 'MicrosoftEdge', | ||
@@ -380,10 +393,22 @@ 'edge': 'MicrosoftEdge', | ||
'mozilla firefox': 'firefox', | ||
'ff': 'firefox' | ||
'ff': 'firefox', | ||
'apple safari': 'Safari', | ||
'ios safari': 'Safari', | ||
'safari mobile': 'Safari', | ||
'iphone': 'Safari', | ||
'ipad': 'Safari', | ||
'android browser': 'Android' | ||
})[browser.name.toLowerCase()] || browser.name; | ||
const osName = ({ | ||
'mac': 'OS X' | ||
let osName = ({ | ||
'win': 'Windows', | ||
'windows': 'Windows', | ||
'mac': 'OS X', | ||
'os x': 'OS X', | ||
'ios': 'iOS', | ||
'android': 'Android', | ||
'linux': 'Linux' | ||
})[browser.os.toLowerCase()] || browser.os; | ||
const osVersion = (({ | ||
let osVersion = (({ | ||
'OS X': { | ||
@@ -399,9 +424,97 @@ 'Snow Leopard': '10.6', | ||
return { | ||
name: `CrossTester - ${displayName}`, | ||
browserName: browserName, | ||
version: browser.version, | ||
platform: osName + (browser.hasOwnProperty('osVersion') && ('undefined' !== typeof osVersion) ? ` ${osVersion}` : ''), | ||
device: browser.device | ||
let appium = false; | ||
let appiumLegacy = false; | ||
let deviceName = (browser.device || '').toLowerCase(); | ||
if ((browserName === 'Safari') && (['iphone', 'ipad'].indexOf((deviceName || '').split(' ')[0]) !== -1)) { | ||
// Safari on iOS | ||
osName = 'iOS'; | ||
appium = true; | ||
if (deviceName === 'iphone') { | ||
deviceName = 'iPhone Simulator'; | ||
} | ||
if (deviceName === 'ipad') { | ||
deviceName = 'iPad Simulator'; | ||
} | ||
} else if (browserName === 'Android') { | ||
// Android Browser | ||
osName = 'Android'; | ||
appium = true; | ||
// find device based on OS version | ||
if (!deviceName) { | ||
deviceName = 'Android Emulator'; | ||
} | ||
if (!osVersion) { | ||
osVersion = browser.version; | ||
} | ||
if (isNaN(parseFloat(osVersion, 10))) { | ||
// find numeric version by name | ||
osVersion = ({ | ||
'lolipop': '5.1', | ||
'kitkat': '4.4', | ||
'jelly bean': '4.3', | ||
'ice cream sandwich': '4.0' | ||
})[osVersion.toLowerCase()]; | ||
} | ||
// for some reason platform is different for older Androids | ||
if (parseFloat(osVersion, 10) < 4.4) { | ||
appiumLegacy = true; | ||
} else { | ||
browserName = 'Browser'; | ||
} | ||
} | ||
const config = { | ||
name: `CrossTester - ${displayName}` | ||
}; | ||
if (!osVersion) { | ||
if ((osName === 'Windows') && (browserName === 'Internet Explorer')) { | ||
osVersion = osVersionForBrowser.ie[browser.version]; | ||
} | ||
if ((osName === 'Windows') && (browserName === 'MicrosoftEdge')) { | ||
osVersion = osVersionForBrowser.edge[browser.version]; | ||
} | ||
if ((osName === 'OS X') && (browserName === 'Safari')) { | ||
osVersion = osVersionForBrowser.safari[browser.version]; | ||
} | ||
} | ||
if (appium) { | ||
assign(config, { | ||
browserName: browserName, | ||
deviceOrientation: 'portrait', | ||
deviceName | ||
}); | ||
if (appiumLegacy) { | ||
assign(config, { | ||
platform: 'Linux', | ||
version: osVersion | ||
}); | ||
} else { | ||
assign(config, { | ||
platformName: osName, | ||
platformVersion: osVersion, | ||
appiumVersion: '1.4.16' | ||
}); | ||
} | ||
} else { | ||
assign(config, { | ||
browserName: browserName, | ||
version: browser.version, | ||
platform: osName + (osVersion ? ` ${osVersion}` : ''), | ||
}); | ||
} | ||
console.log(config); | ||
return config; | ||
} |
@@ -18,4 +18,3 @@ #!/usr/bin/env node | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -27,4 +26,3 @@ 'Mozilla Firefox': { | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -34,6 +32,7 @@ 'Microsoft Internet Explorer': { | ||
versions: { | ||
latest: '11' | ||
latest: '11', | ||
previous: '10', | ||
old: '9' | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -43,6 +42,7 @@ 'Apple Safari': { | ||
versions: { | ||
latest: '9' | ||
latest: '9', | ||
previous: '8', | ||
old: '7' | ||
}, | ||
os: 'OS X', | ||
osVersion: '10.11' | ||
os: 'OS X' | ||
}, | ||
@@ -55,4 +55,3 @@ 'Microsoft Edge': { | ||
}, | ||
os: 'Windows', | ||
osVersion: '10' | ||
os: 'Windows' | ||
}, | ||
@@ -76,8 +75,4 @@ 'Safari Mobile': { | ||
versions: { | ||
'Lollipop': { | ||
osVersion: '5.0' | ||
}, | ||
'Kitkat': { | ||
osVersion: 'KitKat' | ||
} | ||
'Lollipop': '5.0', | ||
'Jelly Bean': 'Jelly Bean' | ||
} | ||
@@ -84,0 +79,0 @@ } |
117711
8.48%25
19.05%2995
11.17%