lambdatest-cypress-cli
Version:
The lambdatest-cypress-cli is LambdaTest's command-line interface (CLI) aimed to help you run your Cypress tests on LambdaTest platform.
156 lines (141 loc) • 6.67 kB
JavaScript
const fs = require("fs");
const path = require('path');
function getImageResolution(buffer) {
try {
if (buffer.length < 24) {
return { width: 0, height: 0 };
}
const pngSignature = [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A];
for (let i = 0; i < 8; i++) {
if (buffer[i] !== pngSignature[i]) {
return { width: 0, height: 0 };
}
}
const width = buffer.readUInt32BE(16);
const height = buffer.readUInt32BE(20);
return { width, height };
} catch (error) {
console.error(`Error extracting image resolution: ${error.message}`);
return { width: 0, height: 0 };
}
}
const Accessibility = (on, config) => {
on('task', {
lambdatest_log(message) {
console.log(message)
return null
},
initializeFile(filePath) {
const dir = path.dirname(filePath);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
if (!fs.existsSync(filePath)) {
fs.writeFileSync(filePath, '[]');
}
return filePath;
},
readFileIfExists(filePath) {
const fullPath = path.resolve(filePath);
if (fs.existsSync(fullPath)) {
const fileContent = fs.readFileSync(fullPath, 'utf8');
return { exists: true, content:fileContent };
} else {
return { exists: false, content: null }; // Return null if the file doesn't exist
}
},
convertScreenshotToBase64(filePath) {
try {
const fullPath = path.resolve(filePath);
if (fs.existsSync(fullPath)) {
const imageBuffer = fs.readFileSync(fullPath);
const base64String = imageBuffer.toString('base64');
const imageResolution = getImageResolution(imageBuffer);
return {
base64: base64String,
resolution: imageResolution
};
} else {
console.log(`Screenshot file not found at: ${fullPath}`);
return null;
}
} catch (error) {
console.error(`Error converting screenshot to base64: ${error.message}`);
return null;
}
},
deleteFile(filePath) {
try {
const fullPath = path.resolve(filePath);
if (fs.existsSync(fullPath)) {
fs.unlinkSync(fullPath);
return true;
} else {
console.log(`File not found for deletion: ${filePath}`);
return false;
}
} catch (error) {
console.error(`Error deleting file: ${error.message}`);
return false;
}
}
})
let browser_validation = true;
let cli_version;
on('before:browser:launch', (browser = {}, launchOptions) => {
try {
if (process.env.ACCESSIBILITY_EXTENSION_PATH !== undefined) {
if (browser.name !== 'chrome' && browser.name !== 'edge' && browser.name !== 'chrome-for-testing') {
console.log(`Accessibility Automation will run only on Chrome and Edge browsers. But browser used is ` + browser.name);
browser_validation = false;
}
if (browser.name === 'chrome' && browser.majorVersion <= 94) {
console.log(`Accessibility Automation will run only on Chrome browser version greater than 94.`);
browser_validation = false;
}
if (browser.isHeadless === true) {
console.log(`Accessibility Automation will not run on legacy headless mode. Switch to new headless mode or avoid using headless mode.`);
browser_validation = false;
}
if (!process.env.ACCESSIBILITY){
console.log(`Accessibility Automation is disabled.`);
browser_validation = false;
}
if (browser_validation) {
const accessibility_ext_path = process.env.ACCESSIBILITY_EXTENSION_PATH
launchOptions.args.push(`--load-extension=` + accessibility_ext_path)
launchOptions.args.push('--disable-features=DisableLoadExtensionCommandLineSwitch')
return launchOptions
}
}
cli_version = execSync("npx lambdatest-cypress --version");
cli_version = cli_version.toString().trim();
} catch(err) {
console.log(`Error in loading Accessibility Automation extension: ${err.message}`);
}
})
config.env.WCAG_CRITERIA= process.env.WCAG_CRITERIA;
config.env.BEST_PRACTICE= process.env.BEST_PRACTICE;
config.env.NEEDS_REVIEW= process.env.NEEDS_REVIEW;
config.env.ACCESSIBILITY_REPORT_PATH = process.env.ACCESSIBILITY_REPORT_PATH;
config.env.ACCESSIBILITY = process.env.ACCESSIBILITY;
config.env.TEST_ID = process.env.TEST_ID;
config.env.ACCESSIBILITY_OVERIDE_COMMANDS = process.env.ACCESSIBILITY_OVERIDE_COMMANDS;
config.env.CAPTURE_SCREENSHOT = process.env.CAPTURE_SCREENSHOT;
config.env.PASSED_TEST_CASES = process.env.PASSED_TEST_CASES;
config.env.GENERATE_REPORT_API = process.env.GENERATE_REPORT_API || "NA";
console.log(`parameter for accessibility report ACCESSIBILITY - ` + config.env.ACCESSIBILITY)
console.log(`parameter for accessibility report WCAG_CRITERIA - ` + config.env.WCAG_CRITERIA)
console.log(`parameter for accessibility report BEST_PRACTICE -` + config.env.BEST_PRACTICE)
console.log(`parameter for accessibility report NEEDS_REVIEW -` + config.env.NEEDS_REVIEW)
console.log(`parameter for accessibility report ACCESSIBILITY_REPORT_PATH -` + config.env.ACCESSIBILITY_REPORT_PATH)
console.log(`parameter for accessibility report TEST_ID -` + config.env.TEST_ID)
console.log(`parameter for accessibility report ACCESSIBILITY_EXTENSION_PATH -` + process.env.ACCESSIBILITY_EXTENSION_PATH)
console.log(`parameter for accessibility report ACCESSIBILITY_OVERIDE_COMMANDS -` + config.env.ACCESSIBILITY_OVERIDE_COMMANDS)
console.log(`parameter for accessibility report GENERATE_REPORT_API -` + config.env.GENERATE_REPORT_API)
console.log(`parameter for accessibility report CAPTURE_SCREENSHOT -` + config.env.CAPTURE_SCREENSHOT)
console.log(`parameter for accessibility report PASSED_TEST_CASES -` + config.env.PASSED_TEST_CASES)
console.log(`parameter for accessibility report CYPRESS_CLI_VERSION -` + cli_version)
return config;
}
module.exports = Accessibility;