Skip to content

Commit

Permalink
Merge pull request #184 from applitools/cvg-tests-improvements
Browse files Browse the repository at this point in the history
Coverage tests improvements
  • Loading branch information
amitzur committed Jun 14, 2020
2 parents 463135f + b27d395 commit 6e05f38
Show file tree
Hide file tree
Showing 23 changed files with 692 additions and 1,544 deletions.
7 changes: 3 additions & 4 deletions packages/eyes-protractor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@
"chai-as-promised": "^7.1.1",
"chromedriver": "^81.0.0",
"cors": "^2.8.5",
"mocha": "^7.2.0",
"mocha-parallel-tests": "^2.3.0",
"mocha": "^8.0.1",
"ncp": "^2.0.0",
"nock": "^12.0.3",
"node-fetch": "^2.6.0",
Expand All @@ -67,10 +66,10 @@
"render": "node ../sdk-shared/src/render.js",
"test": "yarn test:it",
"test:it": "mocha --timeout 120000 \"./test/it/**/*.spec.js\"",
"coverage:generate": "coverage-tests create-tests --remote=$CVG_TESTS_REMOTE",
"coverage:generate": "coverage-tests create-tests",
"coverage:sandbox": "yarn coverage:generate && yarn test:coverage && coverage-tests process-report",
"coverage:prod": "yarn coverage:generate && yarn test:coverage && coverage-tests process-report --send-report prod",
"test:coverage": "env APPLITOOLS_BATCH_NAME='JS Coverage Tests: eyes-protractor' APPLITOOLS_BATCH_ID=$(uuidgen) XUNIT_FILE=coverage-test-report.xml mocha-parallel-tests --no-timeouts --reporter spec-xunit-file --max-parallel 15 --grep '^(?!.*(@native))' {'./test/coverage/generic/*.spec.js','../sdk-coverage-tests/coverage-tests/custom/**/*.spec.js'}",
"test:coverage": "APPLITOOLS_BATCH_NAME='JS Coverage Tests: eyes-protractor' APPLITOOLS_BATCH_ID=$(uuidgen) XUNIT_FILE=coverage-test-report.xml mocha --no-timeouts --reporter spec-xunit-file --parallel --jobs 15 --grep '^(?!.*(@native))' {'./test/coverage/generic/*.spec.js','../sdk-coverage-tests/coverage-tests/custom/**/*.spec.js'}",
"preversion": "bongo preversion && yarn test && yarn coverage:prod",
"version": "bongo version",
"postversion": "bongo postversion"
Expand Down
276 changes: 3 additions & 273 deletions packages/eyes-protractor/test/coverage/index.js
Original file line number Diff line number Diff line change
@@ -1,278 +1,8 @@
const supportedTests = require('./supported-tests')
const {makeEmitTracker} = require('@applitools/sdk-coverage-tests')
const sdkName = 'eyes-protractor'

function initialize() {
const result = makeEmitTracker()
result.storeHook('deps', `const cwd = process.cwd()`)
result.storeHook('deps', `const path = require('path')`)
result.storeHook('deps', `const specs = require(path.resolve(cwd, 'src/SpecWrappedDriver'))`)
result.storeHook(
'deps',
`const {
getEyes,
Browsers
} = require('@applitools/sdk-coverage-tests/coverage-tests/util/TestSetup')`,
)
result.storeHook('deps', `const {Target, RectangleSize, Region} = require(cwd)`)
result.storeHook('vars', 'let eyes')
result.storeHook('vars', 'let driver')
result.storeHook('vars', 'let runner')
result.storeHook('vars', 'let baselineTestName')

function _setup(options) {
result.storeHook('beforeEach', `baselineTestName = '${options.baselineTestName}'`)
result.storeHook(
'beforeEach',
`driver = await specs.build({
capabilities: Browsers.chrome(),
serverUrl: ${options.host ? `'${options.host}'` : undefined},
logLevel: 'error',
})`,
)
result.storeHook(
'beforeEach',
`eyes = getEyes({
isVisualGrid: ${options.executionMode.isVisualGrid},
isCssStitching: ${options.executionMode.isCssStitching},
branchName: '${options.branchName}',
})`,
)
result.storeHook('beforeEach', `eyes.setMatchTimeout(0)`)
}

function _cleanup() {
result.storeHook('afterEach', 'await specs.cleanup(driver)')
}

function abort() {
result.storeCommand('eyes ? await eyes.abortIfNotClosed() : undefined')
}

function makeRegionLocator(target) {
return typeof target === 'string'
? `specs.toSupportedSelector({type: 'css', selector: '${target}'})`
: `new Region(${JSON.stringify(target)})`
}

function checkFrame(
target,
{isClassicApi = false, isFully = false, tag, matchTimeout = 0, isLayout, floatingRegion} = {},
) {
if (isClassicApi) {
result.storeCommand(
`await eyes.checkFrame(
${makeRegionLocator(target)},
${matchTimeout},
${tag ? `'${tag}` : undefined},
)`,
)
} else {
result.storeCommand(`{`)
result.storeCommand(`let checkSettings = new Target()`)
if (Array.isArray(target)) {
target.forEach(entry => {
result.storeCommand(`checkSettings.frame(${makeRegionLocator(entry)})`)
})
} else {
result.storeCommand(`checkSettings.frame(${makeRegionLocator(target)})`)
}
if (floatingRegion) {
result.storeCommand(`checkSettings.floatingRegion(
${makeRegionLocator(floatingRegion.target)},
${floatingRegion.maxUp},
${floatingRegion.maxDown},
${floatingRegion.maxLeft},
${floatingRegion.maxRight},
)`)
}
if (isLayout) {
result.storeCommand(`checkSettings.layout()`)
}
result.storeCommand(`checkSettings.fully(${isFully}).timeout(${matchTimeout})`)
result.storeCommand(`await eyes.check(${tag ? `'${tag}` : undefined}, checkSettings)`)
result.storeCommand(`}`)
}
}

function checkRegion(
target,
{
floatingRegion,
isClassicApi = false,
isFully = false,
inFrame,
ignoreRegion,
isLayout,
matchTimeout = 0,
tag,
} = {},
) {
if (isClassicApi) {
inFrame
? result.storeCommand(
`await eyes.checkRegionInFrame(
${makeRegionLocator(inFrame)},
${makeRegionLocator(target)},
${matchTimeout},
${tag ? `'${tag}'` : undefined},
${isFully}
)`,
)
: result.storeCommand(
`await eyes.checkRegionBy(
${makeRegionLocator(target)},
${tag ? `'${tag}'` : undefined},
${matchTimeout},
${isFully}
)`,
)
} else {
result.storeCommand(`{`)
result.storeCommand(`const checkSettings = new Target()`)
if (Array.isArray(inFrame)) {
inFrame.forEach(entry => {
result.storeCommand(`checkSettings.frame(${makeRegionLocator(entry)})`)
})
} else if (inFrame) {
result.storeCommand(`checkSettings.frame(${makeRegionLocator(inFrame)})`)
}
result.storeCommand(`checkSettings.region(${makeRegionLocator(target)})`)
if (ignoreRegion) {
result.storeCommand(`checkSettings.ignoreRegions(${makeRegionLocator(ignoreRegion)})`)
}
if (floatingRegion) {
result.storeCommand(
`checkSettings.floatingRegion(
${makeRegionLocator(floatingRegion.target)},
${floatingRegion.maxUp},
${floatingRegion.maxDown},
${floatingRegion.maxLeft},
${floatingRegion.maxRight},
)`,
)
}
if (isLayout) {
result.storeCommand(`checkSettings.layout()`)
}
result.storeCommand(`checkSettings.fully(${isFully}).timeout(${matchTimeout})`)
result.storeCommand(`await eyes.check(${tag ? `'${tag}'` : undefined}, checkSettings)`)
result.storeCommand(`}`)
}
}

function checkWindow({
isClassicApi = false,
isFully = false,
ignoreRegion,
floatingRegion,
scrollRootElement,
tag,
matchTimeout = 0,
} = {}) {
if (isClassicApi) {
result.storeCommand(
`await eyes.checkWindow(${tag ? `'${tag}'` : undefined}, ${matchTimeout}, ${isFully})`,
)
} else {
result.storeCommand(`{`)
result.storeCommand(
`const checkSettings = Target.window()
.fully(${isFully})
.ignoreCaret()
.timeout(${matchTimeout})`,
)
if (scrollRootElement) {
result.storeCommand(
`checkSettings.scrollRootElement(${makeRegionLocator(scrollRootElement)})`,
)
}
if (ignoreRegion) {
result.storeCommand(`checkSettings.ignoreRegions(${makeRegionLocator(ignoreRegion)})`)
}
if (floatingRegion) {
result.storeCommand(`
checkSettings.floatingRegion(
${makeRegionLocator(floatingRegion.target)},
${floatingRegion.maxUp},
${floatingRegion.maxDown},
${floatingRegion.maxLeft},
${floatingRegion.maxRight},
)`)
}
result.storeCommand(`await eyes.check(${tag ? `'${tag}'` : undefined}, checkSettings)`)
result.storeCommand(`}`)
}
}

function close(options) {
result.storeCommand(`await eyes.close(${options})`)
}

function getAllTestResults() {
result.storeCommand(`{`)
result.storeCommand(`const resultsSummary = await runner.getAllTestResults()`)
result.storeCommand(`resultsSummary = resultsSummary.getAllResults()`)
result.storeCommand(`}`)
}

function open(options) {
result.storeCommand(`await eyes.open(
driver,
'${options.appName}',
baselineTestName,
RectangleSize.parse('${options.viewportSize}'),
)`)
}

function scrollDown(pixels) {
result.storeCommand(`await specs.executeScript(driver, 'window.scrollBy(0,${pixels})')`)
}

function switchToFrame(selector) {
result.storeCommand(`{`)
result.storeCommand(
`const element = await specs.findElement(driver, ${makeRegionLocator(selector)})`,
)
result.storeCommand(`await specs.switchToFrame(driver, element)`)
result.storeCommand(`}`)
}

function type(selector, keys) {
result.storeCommand(`{`)
result.storeCommand(
`const element = await specs.findElement(driver, ${makeRegionLocator(selector)})`,
)
result.storeCommand(`await specs.type(driver, element, '${keys}')`)
result.storeCommand(`}`)
}

function visit(url) {
result.storeCommand(`await specs.visit(driver, '${url}')`)
}

return {
hooks: {
beforeEach: _setup,
afterEach: _cleanup,
},
out: result,
abort,
visit,
open,
checkFrame,
checkRegion,
checkWindow,
close,
getAllTestResults,
scrollDown,
switchToFrame,
type,
}
}
const {makeSpecEmitter} = require('@applitools/sdk-coverage-tests')

module.exports = {
name: sdkName,
initialize,
name: 'eyes-protractor',
initialize: makeSpecEmitter,
supportedTests,
}
6 changes: 5 additions & 1 deletion packages/eyes-sdk-core/lib/EyesJsSnippets.js
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,11 @@ const GET_CURRENT_CONTEXT_INFO = `

const GET_FRAME_BY_NAME_OR_ID = `
var nameOrId = arguments[0];
return document.querySelector('iframe[name="' + nameOrId + '"],iframe#' + nameOrId)
try {
return document.querySelector('iframe[name="' + nameOrId + '"],iframe#' + nameOrId);
} catch (err) {
return null;
}
`

const GET_FRAMES = `
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ class FullPageCaptureAlgorithm {
for (const partRegion of imageParts) {
// Skipping screenshot, already taken
if (partRegion.getLeft() === initialX && partRegion.getTop() === initialY) {
lastSuccessfulLocation = partRegion.getLocation()
continue
}

Expand Down
9 changes: 4 additions & 5 deletions packages/eyes-selenium/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,7 @@
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"chromedriver": "^83.0.0",
"mocha": "^6.2.2",
"mocha-parallel-tests": "^2.2.2",
"mocha": "^8.0.1",
"module-alias": "^2.2.2",
"selenium-webdriver-3": "npm:selenium-webdriver@^3.6.0",
"selenium-webdriver-4": "npm:selenium-webdriver@^4.0.0-alpha.5",
Expand All @@ -64,11 +63,11 @@
"lint": "eslint . --ext .js --no-eslintrc --config ../../.eslintrc",
"render": "node ../sdk-shared/src/render.js",
"test": "yarn test:it",
"test:it": "mocha-parallel-tests --timeout 120000 -r ./test/util/version-alias.js ./test/it/**/*.spec.js",
"coverage:generate": "coverage-tests create-tests --remote=$CVG_TESTS_REMOTE",
"test:it": "mocha -r ./test/util/version-alias.js --timeout 120000 --parallel ./test/it/**/*.spec.js",
"coverage:generate": "coverage-tests create-tests",
"coverage:sandbox": "yarn coverage:generate && yarn test:coverage && coverage-tests process-report",
"coverage:prod": "yarn coverage:generate && yarn test:coverage && coverage-tests process-report --send-report prod",
"test:coverage": "env APPLITOOLS_BATCH_NAME='JS Coverage Tests: eyes-selenium' APPLITOOLS_BATCH_ID=$(uuidgen) XUNIT_FILE=coverage-test-report.xml mocha-parallel-tests -r ./test/util/version-alias.js --no-timeouts --reporter spec-xunit-file --max-parallel 15 \"{test/coverage/generic/*.spec.js,../sdk-coverage-tests/coverage-tests/custom/**/*.spec.js}\"",
"test:coverage": "APPLITOOLS_BATCH_NAME='JS Coverage Tests: eyes-selenium' APPLITOOLS_BATCH_ID=$(uuidgen) XUNIT_FILE=coverage-test-report.xml mocha -r ./test/util/version-alias.js --no-timeouts --reporter spec-xunit-file --parallel --jobs 15 {'./test/coverage/generic/*.spec.js','../sdk-coverage-tests/coverage-tests/custom/**/*.spec.js'}",
"preversion": "bongo preversion && yarn test && yarn coverage:prod",
"version": "bongo version",
"postversion": "bongo postversion"
Expand Down
4 changes: 4 additions & 0 deletions packages/eyes-selenium/src/selenium3/SpecWrappedDriver.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,10 @@ module.exports = {
return el.click()
},

async type(_driver, el, keys) {
return el.sendKeys(keys)
},

async waitUntilDisplayed(driver, selector, timeout) {
const el = await this.findElement(driver, selector)
return driver.wait(until.elementIsVisible(el), timeout)
Expand Down
4 changes: 4 additions & 0 deletions packages/eyes-selenium/src/selenium4/SpecWrappedDriver.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ module.exports = {
return el.click()
},

async type(_driver, el, keys) {
return el.sendKeys(keys)
},

async waitUntilDisplayed(driver, selector, timeout) {
const el = await this.findElement(driver, selector)
return driver.wait(until.elementIsVisible(el), timeout)
Expand Down
Loading

0 comments on commit 6e05f38

Please sign in to comment.