Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #26

Merged
merged 1 commit into from
Feb 2, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# lambdatest-sdk
# lambdatest-js-sdk
1 change: 1 addition & 0 deletions packages/playwright/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# @lambdatest/playwright-driver
26 changes: 15 additions & 11 deletions packages/playwright/package.json
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
{
"name": "@lambdatest/playwright-driver",
"version": "1.0.3",
"description": "Playwright SDK for smart UI",
"description": "Playwright driver for all Lambdatest functionalities",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/LambdaTest/lambdatest-js-sdk.git",
"directory": "packages/playwright"
},
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk/packages/playwright#readme",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"lambdatest",
"playwright",
"smartui"
"playwright"
],
"author": "LambdaTest <keys@lambdatest.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk#readme",
"dependencies": {
"@lambdatest/sdk-utils": "workspace:^"
},
"peerDependencies": {
"playwright-core": ">=1"
},
"devDependencies": {
"playwright-core": ">=1"
}
}

58 changes: 26 additions & 32 deletions packages/playwright/src/smartui.js
Original file line number Diff line number Diff line change
@@ -1,42 +1,36 @@
const utils = require('@lambdatest/sdk-utils');
const pkgName = require('../package.json').name;
const testType = 'js-playwright-driver';

// Take a DOM snapshot and post it to the snapshot endpoint
async function smartuiSnapshot(page, name, options) {
if (!page) throw new Error('A Playwright `page` object is required.');
if (!name || typeof name !== 'string') throw new Error('The `name` argument is required.');
if (!(await utils.isSmartUIRunning())) throw new Error('Cannot find SmartUI server.');
async function smartuiSnapshot(page, name, options = {}) {
if (!page) throw new Error('A Playwright `page` object is required.');
if (!name || typeof name !== 'string') throw new Error('The `name` argument is required.');
if (!(await utils.isSmartUIRunning())) throw new Error('Cannot find SmartUI server.');

let log = utils.logger(pkgName);
let log = utils.logger(pkgName);
try {
const resp = await utils.fetchDOMSerializer();
await page.evaluate(resp.body.data.dom);

try {
// Inject the DOM serialization script
const resp = await utils.fetchDOMSerializer();
await page.evaluate(resp.body.data.dom);

// Serialize and capture the DOM
/* istanbul ignore next: no instrumenting injected code */
let { dom } = await page.evaluate((options) => ({
/* eslint-disable-next-line no-undef */
dom: SmartUIDOM.serialize(options)
}), {});
let { dom } = await page.evaluate((options) => ({
dom: SmartUIDOM.serialize(options)
}), {});

// Post the DOM to the snapshot endpoint with snapshot options and other info
let { body } = await utils.postSnapshot({
dom,
url: page.url(),
name,
options
}, pkgName);
let { body } = await utils.postSnapshot({
dom,
url: page.url(),
name,
options
}, testType);
if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e));

log.info(`Snapshot captured: ${name}`);

if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e));
} catch (err) {
throw err;
}
log.info(`Snapshot captured: ${name}`);
} catch (error) {
log.error(`SmartUI snapshot failed "${name}"`);
log.error(error);
}
}

module.exports = {
smartuiSnapshot
}
smartuiSnapshot
}
1 change: 1 addition & 0 deletions packages/puppeteer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# @lambdatest/puppeteer-driver
25 changes: 15 additions & 10 deletions packages/puppeteer/package.json
Original file line number Diff line number Diff line change
@@ -1,28 +1,33 @@
{
"name": "@lambdatest/puppeteer-driver",
"version": "1.0.3",
"description": "Puppeteer SDK for smart UI",
"description": "Puppeteer driver for all Lambdatest functionalities",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/LambdaTest/lambdatest-js-sdk.git",
"directory": "packages/puppeteer"
},
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk/packages/puppeteer#readme",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"lambdatest",
"puppeteer",
"smartui"
"puppeteer"
],
"author": "LambdaTest <keys@lambdatest.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk#readme",
"dependencies": {
"@lambdatest/sdk-utils": "workspace:^"
},
"devDependencies": {
"puppeteer": ">=1"
},
"peerDependencies": {
"puppeteer": ">=1"
}
}
24 changes: 6 additions & 18 deletions packages/puppeteer/src/smartui.js
Original file line number Diff line number Diff line change
@@ -1,44 +1,32 @@
const utils = require('@lambdatest/sdk-utils');
const pkgName = require('../package.json').name;

const testType = 'js-puppeteer-driver';

async function smartuiSnapshot(page, name, options = {}) {
if (!page) throw new Error('puppeteer `page` argument is required.');
if (!name || typeof name !== 'string') throw new Error('The `name` argument is required.');
if (!(await utils.isSmartUIRunning())) throw new Error('Cannot find SmartUI server.');

let log = utils.logger(pkgName);

try {
// Fetch the DOM serializer from the SmartUI server.
let resp = await utils.fetchDOMSerializer();

// Inject the DOM serializer into the page.
await page.evaluate(resp.body.data.dom);

// Serialize the DOM
let { dom, url } = await page.evaluate(options => ({
dom: SmartUIDOM.serialize(options),
url: document.URL
}), {});


// Post it to the SmartUI server.
let { body } = await utils.postSnapshot({
dom,
url,
name,
options
}, pkgName);
let { body } = await utils.postSnapshot({ dom, url, name, options }, testType);
if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e));

log.info(`Snapshot captured: ${name}`);

if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e));
} catch (error) {
throw new Error(error);
log.error(`SmartUI snapshot failed "${name}"`);
log.error(error);
}
}

module.exports = {
smartuiSnapshot
};
};
1 change: 1 addition & 0 deletions packages/sdk-utils/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# @lambdatest/sdk-utils
6 changes: 5 additions & 1 deletion packages/sdk-utils/package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
{
"name": "@lambdatest/sdk-utils",
"version": "1.0.3",
"description": "",
"description": "LambdaTest driver utils",
"main": "index.js",
"repository": {
"type": "git",
"url": "git+https://github.com/LambdaTest/lambdatest-js-sdk",
"directory": "packages/sdk-utils"
},
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk/packages/sdk-utils#readme",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
1 change: 1 addition & 0 deletions packages/selenium/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# @lambdatest/selenium-driver
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -6,8 +6,12 @@
"repository": {
"type": "git",
"url": "git+https://github.com/LambdaTest/lambdatest-js-sdk",
"directory": "packages/selenium-driver"
"directory": "packages/selenium"
},
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk/packages/selenium#readme",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
@@ -19,5 +23,11 @@
"license": "MIT",
"dependencies": {
"@lambdatest/sdk-utils": "workspace:^"
},
"devDependencies": {
"selenium-webdriver": ">=4"
},
"peerDependencies": {
"selenium-webdriver": ">=4"
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
const utils = require('@lambdatest/sdk-utils');
const pkgName = require('../package.json').name;
const testType = 'js-selenium-driver';

async function smartuiSnapshot(driver, name, options = {}) {
// TODO: check if driver is selenium webdriver object
if (!driver) throw new Error('An instance of the selenium driver object is required.');
if (!name || typeof name !== 'string') throw new Error('The `name` argument is required.');
if (!(await utils.isSmartUIRunning())) throw new Error('Cannot find SmartUI server.');
let log = utils.logger(pkgName);

let log = utils.logger(pkgName);
try {
let resp = await utils.fetchDOMSerializer();
await driver.executeScript(resp.body.data.dom);
@@ -18,10 +18,12 @@ async function smartuiSnapshot(driver, name, options = {}) {
}), {});

let { body } = await utils.postSnapshot({url, name, dom, options}, pkgName);
log.info(`Snapshot captured: ${name}`);
if (body && body.data && body.data.warnings?.length !== 0) body.data.warnings.map(e => log.warn(e));

log.info(`Snapshot captured: ${name}`);
} catch (error) {
throw new Error(error);
log.error(`SmartUI snapshot failed "${name}"`);
log.error(error);
}
}

1 change: 1 addition & 0 deletions packages/testcafe/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# @lambdatest/testcafe-driver
19 changes: 12 additions & 7 deletions packages/testcafe/package.json
Original file line number Diff line number Diff line change
@@ -2,27 +2,32 @@
"name": "@lambdatest/testcafe-driver",
"version": "1.0.3",
"description": "Testcafe SDK for LambdaTest smart UI",
"main": "index.js",
"repository": {
"type": "git",
"url": "git+https://github.com/LambdaTest/lambdatest-js-sdk.git",
"directory": "packages/testcafe"
},
"main": "index.js",
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk/packages/testcafe#readme",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"lambdatest",
"testcafe",
"smartui"
"testcafe"
],
"author": "LambdaTest <keys@lambdatest.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/LambdaTest/lambdatest-js-sdk/issues"
},
"homepage": "https://github.com/LambdaTest/lambdatest-js-sdk#readme",
"dependencies": {
"@lambdatest/sdk-utils": "workspace:^"
},
"devDependencies": {
"testcafe": ">=1"
},
"peerDependencies": {
"testcafe": ">=1"
}
}
Loading
Oops, something went wrong.