diff --git a/packages/sdk-utils/index.js b/packages/sdk-utils/index.js index f0079bb..06955fb 100644 --- a/packages/sdk-utils/index.js +++ b/packages/sdk-utils/index.js @@ -1,9 +1,10 @@ -const { isSmartUIRunning, fetchDOMSerializer, postSnapshot } = require('./src/smartui'); +const { isSmartUIRunning, fetchDOMSerializer, postSnapshot, getSnapshotStatus } = require('./src/smartui'); const logger = require('./src/lib/logger'); module.exports = { logger, fetchDOMSerializer, postSnapshot, - isSmartUIRunning + isSmartUIRunning, + getSnapshotStatus } diff --git a/packages/sdk-utils/package.json b/packages/sdk-utils/package.json index fd43e90..e4619a4 100644 --- a/packages/sdk-utils/package.json +++ b/packages/sdk-utils/package.json @@ -1,6 +1,6 @@ { "name": "@lambdatest/sdk-utils", - "version": "1.0.7", + "version": "1.0.8", "description": "LambdaTest driver utils", "main": "index.js", "repository": { diff --git a/packages/sdk-utils/src/lib/httpClient.js b/packages/sdk-utils/src/lib/httpClient.js index 570cfc5..c3217dc 100644 --- a/packages/sdk-utils/src/lib/httpClient.js +++ b/packages/sdk-utils/src/lib/httpClient.js @@ -47,4 +47,17 @@ module.exports = new class httpClient { } }) } + + getSnapshotStatus(contextId, snapshotName, pollTimeout) { + return this.request({ + url: `${utils.getSmartUIServerAddress()}/snapshot/status`, + method: 'GET', + params: { + contextId: contextId, + snapshotName: snapshotName, + pollTimeout: pollTimeout + } + }); + } + }; diff --git a/packages/sdk-utils/src/smartui.js b/packages/sdk-utils/src/smartui.js index e17bc07..ae08a8b 100644 --- a/packages/sdk-utils/src/smartui.js +++ b/packages/sdk-utils/src/smartui.js @@ -36,8 +36,18 @@ async function postSnapshot(snapshot, testType) { } } +async function getSnapshotStatus(contextId,snapshotName,pollTimeout=600) { + try { + return await client.getSnapshotStatus(contextId,snapshotName,pollTimeout); + } catch (error) { + log.debug(error); + throw new Error(`get snapshot status failed; ${error.message}`); + } +} + module.exports = { isSmartUIRunning, fetchDOMSerializer, - postSnapshot -} + postSnapshot, + getSnapshotStatus +} \ No newline at end of file diff --git a/packages/selenium/package.json b/packages/selenium/package.json index 6042f9d..c4738b3 100644 --- a/packages/selenium/package.json +++ b/packages/selenium/package.json @@ -1,6 +1,6 @@ { "name": "@lambdatest/selenium-driver", - "version": "1.0.7", + "version": "1.0.8", "description": "Selenium driver for all Lambdatest functionalities", "main": "index.js", "repository": { diff --git a/packages/selenium/src/smartui.js b/packages/selenium/src/smartui.js index b1aa277..cf03a5f 100644 --- a/packages/selenium/src/smartui.js +++ b/packages/selenium/src/smartui.js @@ -1,6 +1,7 @@ const utils = require('@lambdatest/sdk-utils'); const pkgName = require('../package.json').name; const testType = 'js-selenium-driver'; +const crypto = require('crypto'); async function smartuiSnapshot(driver, name, options = {}) { if (!driver) throw new Error('An instance of the selenium driver object is required.'); @@ -24,11 +25,25 @@ async function smartuiSnapshot(driver, name, options = {}) { dom: SmartUIDOM.serialize(options), url: document.URL }), {}); - - let { body } = await utils.postSnapshot({url, name, dom, options}, pkgName); - if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e)); - - log.info(`Snapshot captured: ${name}`); + + if(options?.sync){ + options.contextId = crypto.randomUUID(); + let { body } = await utils.postSnapshot({url, name, dom, options}, pkgName); + if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e)); + log.info(`Snapshot captured: ${name}`); + let timeout = options?.timeout || 600; + if(timeout<30||timeout>900){ + log.info(`Timeout value must be between 30 and 900 seconds. Using default value of 600 seconds.`); + timeout = 600; + } + let snapshotStatus = await utils.getSnapshotStatus(options.contextId,name,timeout); + return snapshotStatus.body; + } + else{ + let { body } = await utils.postSnapshot({url, name, dom, options}, pkgName); + if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e)); + log.info(`Snapshot captured: ${name}`); + } } catch (error) { log.error(`SmartUI snapshot failed "${name}"`); log.error(error); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 655a264..c837337 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5959,4 +5959,4 @@ packages: archiver-utils: 4.0.1 compress-commons: 5.0.1 readable-stream: 3.6.2 - dev: true + dev: true \ No newline at end of file