@zeesoft/i18n-verify 3.3.6 → 3.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/executor.mjs +79 -51
- package/package.json +1 -1
package/dist/executor.mjs
CHANGED
|
@@ -302,7 +302,7 @@ const pathExists = (path2) => existsSync(path2);
|
|
|
302
302
|
const createFolder = (path2) => !pathExists(path2) && mkdirSync(path2, { recursive: true });
|
|
303
303
|
const ensureDirectoryExists = (path2, log2 = true) => {
|
|
304
304
|
if (!pathExists(path2) || !dirExists(path2)) {
|
|
305
|
-
log2 && Logger.debug(`Folder doesn't exists, creating \x1B[34m${path2}\x1B[0m`);
|
|
305
|
+
log2 && Logger$1.debug(`Folder doesn't exists, creating \x1B[34m${path2}\x1B[0m`);
|
|
306
306
|
createFolder(path2);
|
|
307
307
|
}
|
|
308
308
|
};
|
|
@@ -321,7 +321,7 @@ const addContentToFile = (path2, content, encoding = "utf-8") => {
|
|
|
321
321
|
flag: "a"
|
|
322
322
|
});
|
|
323
323
|
} catch (err) {
|
|
324
|
-
Logger.error(err);
|
|
324
|
+
Logger$1.error(err);
|
|
325
325
|
}
|
|
326
326
|
};
|
|
327
327
|
const getDirPath = (filePath) => dirname(filePath);
|
|
@@ -426,7 +426,7 @@ class BaseReport {
|
|
|
426
426
|
export(path2, name = DEFAULT_REPORT_NAME) {
|
|
427
427
|
this.write(path2, name, this.$generatedContent);
|
|
428
428
|
const runMode = Config.getMode();
|
|
429
|
-
Logger.info(
|
|
429
|
+
Logger$1.info(
|
|
430
430
|
`Exported consolidated ${runMode} Verification ${this.$type} report in ${path2}`
|
|
431
431
|
);
|
|
432
432
|
}
|
|
@@ -4188,7 +4188,7 @@ class TableReport extends BaseReport {
|
|
|
4188
4188
|
if (this.#hasData) {
|
|
4189
4189
|
this.#printer.printTable();
|
|
4190
4190
|
} else {
|
|
4191
|
-
Logger.info("There are no visible elements with UI strings");
|
|
4191
|
+
Logger$1.info("There are no visible elements with UI strings");
|
|
4192
4192
|
}
|
|
4193
4193
|
}
|
|
4194
4194
|
}
|
|
@@ -5012,14 +5012,7 @@ class Reports {
|
|
|
5012
5012
|
}
|
|
5013
5013
|
}
|
|
5014
5014
|
static #dateTime() {
|
|
5015
|
-
|
|
5016
|
-
const year = now.getFullYear();
|
|
5017
|
-
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
5018
|
-
const day = String(now.getDate()).padStart(2, "0");
|
|
5019
|
-
const hours = String(now.getHours()).padStart(2, "0");
|
|
5020
|
-
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
5021
|
-
const timeStamp = `${year}-${month}-${day}-${hours}-${minutes}`;
|
|
5022
|
-
return timeStamp;
|
|
5015
|
+
return Date.now().toString();
|
|
5023
5016
|
}
|
|
5024
5017
|
static #generateFullReportPath = (type, str, imgName) => {
|
|
5025
5018
|
const _screenshotPath = joinPaths(
|
|
@@ -5077,21 +5070,21 @@ class Reports {
|
|
|
5077
5070
|
Reports.#generateReport(SUPPORTED_REPORT_TYPES.ASCII_TABLE);
|
|
5078
5071
|
}
|
|
5079
5072
|
}
|
|
5080
|
-
|
|
5073
|
+
let Logger$1 = class Logger2 {
|
|
5081
5074
|
static #isLogAppending = false;
|
|
5082
5075
|
static #appenderInterval;
|
|
5083
5076
|
static #appenderQueue = [];
|
|
5084
5077
|
static info(message) {
|
|
5085
|
-
|
|
5078
|
+
Logger2.#print("info", message);
|
|
5086
5079
|
}
|
|
5087
5080
|
static warn(message) {
|
|
5088
|
-
|
|
5081
|
+
Logger2.#print("warn", message);
|
|
5089
5082
|
}
|
|
5090
5083
|
static error(message, err) {
|
|
5091
|
-
|
|
5084
|
+
Logger2.#print("errr", message, err);
|
|
5092
5085
|
}
|
|
5093
5086
|
static debug(message) {
|
|
5094
|
-
|
|
5087
|
+
Logger2.#print("dbug", message);
|
|
5095
5088
|
}
|
|
5096
5089
|
static #print(type, message, additionalObj = "") {
|
|
5097
5090
|
if (type === "dbug" && !Config.isDebugMode()) {
|
|
@@ -5125,32 +5118,32 @@ class Logger {
|
|
|
5125
5118
|
console.log(logMessage);
|
|
5126
5119
|
}
|
|
5127
5120
|
logMessage = logMessage.replace(/\x1b\[\d+m/g, "");
|
|
5128
|
-
|
|
5121
|
+
Logger2.#customLog(`${logMessage}
|
|
5129
5122
|
`);
|
|
5130
5123
|
}
|
|
5131
5124
|
static #customLog = (message) => {
|
|
5132
|
-
if (
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
if (!
|
|
5136
|
-
clearInterval(
|
|
5137
|
-
message =
|
|
5138
|
-
|
|
5139
|
-
message &&
|
|
5125
|
+
if (Logger2.#isLogAppending) {
|
|
5126
|
+
Logger2.#appenderQueue.push(message);
|
|
5127
|
+
Logger2.#appenderInterval = setInterval(() => {
|
|
5128
|
+
if (!Logger2.#isLogAppending) {
|
|
5129
|
+
clearInterval(Logger2.#appenderInterval);
|
|
5130
|
+
message = Logger2.#appenderQueue.join("\n");
|
|
5131
|
+
Logger2.#appenderQueue = [];
|
|
5132
|
+
message && Logger2.#customLog(message);
|
|
5140
5133
|
}
|
|
5141
5134
|
}, 10);
|
|
5142
5135
|
} else {
|
|
5143
|
-
|
|
5136
|
+
Logger2.#isLogAppending = true;
|
|
5144
5137
|
const logsDir = joinPaths(Reports.getReportPath(), "logs");
|
|
5145
5138
|
if (logsDir) {
|
|
5146
5139
|
const logFilePath = joinPaths(logsDir, "log");
|
|
5147
5140
|
ensureDirectoryExists(logsDir, Config.isDebugMode());
|
|
5148
5141
|
fs.appendFileSync(logFilePath, message);
|
|
5149
5142
|
}
|
|
5150
|
-
|
|
5143
|
+
Logger2.#isLogAppending = false;
|
|
5151
5144
|
}
|
|
5152
5145
|
};
|
|
5153
|
-
}
|
|
5146
|
+
};
|
|
5154
5147
|
class NightWatchDriver extends BaseDriver {
|
|
5155
5148
|
constructor(driver) {
|
|
5156
5149
|
super(driver);
|
|
@@ -5236,7 +5229,13 @@ class NightWatchDriver extends BaseDriver {
|
|
|
5236
5229
|
return eleStr;
|
|
5237
5230
|
}
|
|
5238
5231
|
async captureScreenshot(file) {
|
|
5239
|
-
|
|
5232
|
+
const browserNameRaw = this.$driver.capabilities?.browserName;
|
|
5233
|
+
const browserNames = Array.isArray(browserNameRaw) ? browserNameRaw.map((b) => b?.toLowerCase?.()) : [browserNameRaw?.toLowerCase?.()];
|
|
5234
|
+
if (browserNames.includes("chrome") || browserNames.includes("chromium")) {
|
|
5235
|
+
await captureFullPage$1(this.$driver, file);
|
|
5236
|
+
} else {
|
|
5237
|
+
await captureScreenshotFallback$1(this.$driver, file);
|
|
5238
|
+
}
|
|
5240
5239
|
}
|
|
5241
5240
|
async getElementsCount(elements) {
|
|
5242
5241
|
return elements.length;
|
|
@@ -5304,9 +5303,22 @@ const captureFullPage$1 = async (driver, filePath) => {
|
|
|
5304
5303
|
});
|
|
5305
5304
|
const screenshotBuffer = Buffer.from(data2, "base64");
|
|
5306
5305
|
writeFileSync(filePath, screenshotBuffer);
|
|
5307
|
-
Logger.debug(`Screenshot saved as: ${filePath}`);
|
|
5306
|
+
Logger$1.debug(`Screenshot saved as: ${filePath}`);
|
|
5308
5307
|
await client.close();
|
|
5309
5308
|
};
|
|
5309
|
+
const captureScreenshotFallback$1 = async (driver, filePath) => {
|
|
5310
|
+
const screenshot = await new Promise((resolve2, reject) => {
|
|
5311
|
+
driver.screenshot(function(result) {
|
|
5312
|
+
if (result.status === 0) {
|
|
5313
|
+
resolve2(result.value);
|
|
5314
|
+
} else {
|
|
5315
|
+
reject(new Error("Screenshot capture failed"));
|
|
5316
|
+
}
|
|
5317
|
+
});
|
|
5318
|
+
});
|
|
5319
|
+
writeFileSync(filePath, Buffer.from(screenshot, "base64"));
|
|
5320
|
+
Logger$1.debug(`Screenshot saved as: ${filePath}`);
|
|
5321
|
+
};
|
|
5310
5322
|
const getRemoteDebuggerPort$1 = (driver) => {
|
|
5311
5323
|
const debuggerAddress = driver?.capabilities?.["goog:chromeOptions"]?.debuggerAddress;
|
|
5312
5324
|
if (debuggerAddress) {
|
|
@@ -5395,7 +5407,13 @@ class WebDriverIoDriver extends BaseDriver {
|
|
|
5395
5407
|
return eleStr;
|
|
5396
5408
|
}
|
|
5397
5409
|
async captureScreenshot(file) {
|
|
5398
|
-
|
|
5410
|
+
const browserNameRaw = this.$driver.capabilities?.browserName;
|
|
5411
|
+
const browserNames = Array.isArray(browserNameRaw) ? browserNameRaw.map((b) => b?.toLowerCase?.()) : [browserNameRaw?.toLowerCase?.()];
|
|
5412
|
+
if (browserNames.includes("chrome") || browserNames.includes("chromium")) {
|
|
5413
|
+
await captureFullPage(this.$driver, file);
|
|
5414
|
+
} else {
|
|
5415
|
+
await captureScreenshotFallback(this.$driver, file);
|
|
5416
|
+
}
|
|
5399
5417
|
}
|
|
5400
5418
|
async getElementsCount(elements) {
|
|
5401
5419
|
return elements.length;
|
|
@@ -5449,6 +5467,11 @@ const captureFullPage = async (driver, filePath) => {
|
|
|
5449
5467
|
fs.writeFileSync(filePath, Buffer.from(data2, "base64"));
|
|
5450
5468
|
await client.close();
|
|
5451
5469
|
};
|
|
5470
|
+
const captureScreenshotFallback = async (driver, filePath) => {
|
|
5471
|
+
const screenshot = await driver.takeScreenshot();
|
|
5472
|
+
fs.writeFileSync(filePath, Buffer.from(screenshot, "base64"));
|
|
5473
|
+
Logger.debug(`Screenshot saved as: ${filePath}`);
|
|
5474
|
+
};
|
|
5452
5475
|
const getRemoteDebuggerPort = (driver) => {
|
|
5453
5476
|
const debuggerAddress = driver.capabilities?.["goog:chromeOptions"]?.debuggerAddress;
|
|
5454
5477
|
return debuggerAddress ? debuggerAddress.split(":")[1] || 9229 : 9229;
|
|
@@ -5652,7 +5675,7 @@ class CypressDriver extends BaseDriver {
|
|
|
5652
5675
|
}
|
|
5653
5676
|
}
|
|
5654
5677
|
async captureScreenshot(file) {
|
|
5655
|
-
this.$driver.screenshot(file);
|
|
5678
|
+
await this.$driver.screenshot(file);
|
|
5656
5679
|
}
|
|
5657
5680
|
async getElementsCount(el) {
|
|
5658
5681
|
return new Promise((res) => {
|
|
@@ -5678,7 +5701,7 @@ class CypressDriver extends BaseDriver {
|
|
|
5678
5701
|
}
|
|
5679
5702
|
});
|
|
5680
5703
|
} catch (textError) {
|
|
5681
|
-
Logger.error("Error getting text of element:", textError);
|
|
5704
|
+
Logger$1.error("Error getting text of element:", textError);
|
|
5682
5705
|
}
|
|
5683
5706
|
return elementStrings;
|
|
5684
5707
|
}
|
|
@@ -5754,6 +5777,11 @@ class SeleniumDriver extends BaseDriver {
|
|
|
5754
5777
|
async getElementsCount(elements) {
|
|
5755
5778
|
return elements.length;
|
|
5756
5779
|
}
|
|
5780
|
+
async captureScreenshot(file) {
|
|
5781
|
+
const fs2 = require("fs");
|
|
5782
|
+
const screenshot = await this.$driver.takeScreenshot();
|
|
5783
|
+
fs2.writeFileSync(file, screenshot, "base64");
|
|
5784
|
+
}
|
|
5757
5785
|
}
|
|
5758
5786
|
const build$1 = (type, driver) => {
|
|
5759
5787
|
switch (type) {
|
|
@@ -6039,7 +6067,7 @@ const toLuxonLocale = (locale) => {
|
|
|
6039
6067
|
locale = locale.replace("_", "-");
|
|
6040
6068
|
return Intl.DateTimeFormat.supportedLocalesOf(locale)[0];
|
|
6041
6069
|
} catch (ex) {
|
|
6042
|
-
Logger.warn(`${locale} is unsupported by Intl`);
|
|
6070
|
+
Logger$1.warn(`${locale} is unsupported by Intl`);
|
|
6043
6071
|
return false;
|
|
6044
6072
|
}
|
|
6045
6073
|
};
|
|
@@ -6836,7 +6864,7 @@ class Config {
|
|
|
6836
6864
|
Config.#isDebugMode = config?.debug ?? false;
|
|
6837
6865
|
Config.getGarbledChars();
|
|
6838
6866
|
} catch (ex) {
|
|
6839
|
-
Logger.error(ex.message);
|
|
6867
|
+
Logger$1.error(ex.message);
|
|
6840
6868
|
throw ex;
|
|
6841
6869
|
}
|
|
6842
6870
|
}
|
|
@@ -6992,7 +7020,7 @@ class BaseRunner {
|
|
|
6992
7020
|
await this.#executePageProcess();
|
|
6993
7021
|
}
|
|
6994
7022
|
} catch (ex) {
|
|
6995
|
-
Logger.error("unable to run the process", ex);
|
|
7023
|
+
Logger$1.error("unable to run the process", ex);
|
|
6996
7024
|
} finally {
|
|
6997
7025
|
await this.#postRun();
|
|
6998
7026
|
}
|
|
@@ -7015,10 +7043,10 @@ class BaseRunner {
|
|
|
7015
7043
|
async captureScreen(imagePath) {
|
|
7016
7044
|
try {
|
|
7017
7045
|
await this.#driver.captureScreenshot(imagePath);
|
|
7018
|
-
Logger.debug("reviewed image has been saved");
|
|
7046
|
+
Logger$1.debug("reviewed image has been saved");
|
|
7019
7047
|
return true;
|
|
7020
7048
|
} catch (ex) {
|
|
7021
|
-
Logger.error("unable to capture screenshot");
|
|
7049
|
+
Logger$1.error("unable to capture screenshot");
|
|
7022
7050
|
return false;
|
|
7023
7051
|
}
|
|
7024
7052
|
}
|
|
@@ -7055,7 +7083,7 @@ class BaseRunner {
|
|
|
7055
7083
|
await this.#processLocatorElements();
|
|
7056
7084
|
await this.#processIFrames();
|
|
7057
7085
|
} else {
|
|
7058
|
-
Logger.debug("No locators provided");
|
|
7086
|
+
Logger$1.debug("No locators provided");
|
|
7059
7087
|
}
|
|
7060
7088
|
}
|
|
7061
7089
|
async #executePageProcess() {
|
|
@@ -7114,19 +7142,19 @@ class BaseRunner {
|
|
|
7114
7142
|
}
|
|
7115
7143
|
}
|
|
7116
7144
|
if (!hasElements) {
|
|
7117
|
-
Logger.debug("No UI elements found from the provided locators");
|
|
7145
|
+
Logger$1.debug("No UI elements found from the provided locators");
|
|
7118
7146
|
}
|
|
7119
7147
|
}
|
|
7120
7148
|
async #processIFrames() {
|
|
7121
7149
|
if (await this.#driver.checkIfIframeIsPresent()) {
|
|
7122
7150
|
const frames = await this.#driver.getElements("//iframe");
|
|
7123
|
-
Logger.debug(
|
|
7151
|
+
Logger$1.debug(
|
|
7124
7152
|
`Total ${frames.length} iframes are located on the ${this.#description}`
|
|
7125
7153
|
);
|
|
7126
7154
|
for (let fID = 0; fID < frames.length; fID++) {
|
|
7127
7155
|
const frame = frames[fID];
|
|
7128
7156
|
const offsets = await this.getElementOffsets(frame);
|
|
7129
|
-
Logger.debug(`Switching to iFrame: ${fID}`);
|
|
7157
|
+
Logger$1.debug(`Switching to iFrame: ${fID}`);
|
|
7130
7158
|
await this.#driver.switchToIFrame(fID, frame);
|
|
7131
7159
|
this.#driver.pause(1);
|
|
7132
7160
|
const iframeBody = await this.#driver.getElement("//body");
|
|
@@ -7144,7 +7172,7 @@ class BaseRunner {
|
|
|
7144
7172
|
}
|
|
7145
7173
|
}
|
|
7146
7174
|
}
|
|
7147
|
-
!hasAtLeastOneString && Logger.debug("No valid UI elements found in the iFrame");
|
|
7175
|
+
!hasAtLeastOneString && Logger$1.debug("No valid UI elements found in the iFrame");
|
|
7148
7176
|
await this.#driver.switchToParentFrame();
|
|
7149
7177
|
}
|
|
7150
7178
|
}
|
|
@@ -7157,7 +7185,7 @@ class BaseRunner {
|
|
|
7157
7185
|
try {
|
|
7158
7186
|
await this.process(string, element, offsets, frameId);
|
|
7159
7187
|
} catch (ex) {
|
|
7160
|
-
Logger.error(
|
|
7188
|
+
Logger$1.error(
|
|
7161
7189
|
`unable to process the ${frameId ? `iframe-[${frameId}] ` : ""}string "${string}"`,
|
|
7162
7190
|
ex
|
|
7163
7191
|
);
|
|
@@ -7210,7 +7238,7 @@ class ContextRunner extends BaseRunner {
|
|
|
7210
7238
|
this.getBaseImageName(),
|
|
7211
7239
|
this.getDescription()
|
|
7212
7240
|
);
|
|
7213
|
-
Logger.debug(`context creation for "${string}"`);
|
|
7241
|
+
Logger$1.debug(`context creation for "${string}"`);
|
|
7214
7242
|
await this.#addToContext(string, element, offsets);
|
|
7215
7243
|
}
|
|
7216
7244
|
/**
|
|
@@ -7301,12 +7329,12 @@ class Graphic {
|
|
|
7301
7329
|
const targetDir = path.dirname(report_img);
|
|
7302
7330
|
const buffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
|
7303
7331
|
if (!fs.existsSync(targetDir)) {
|
|
7304
|
-
Logger.debug("folder not found");
|
|
7332
|
+
Logger$1.debug("folder not found");
|
|
7305
7333
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
7306
7334
|
}
|
|
7307
7335
|
fs.writeFileSync(report_img, buffer);
|
|
7308
7336
|
} catch (err) {
|
|
7309
|
-
Logger.error(`Error: ${err}`);
|
|
7337
|
+
Logger$1.error(`Error: ${err}`);
|
|
7310
7338
|
}
|
|
7311
7339
|
}
|
|
7312
7340
|
static async drawRectangleOutline(image, x, y, width, height, color, thickness) {
|
|
@@ -7388,7 +7416,7 @@ class I18nRunner extends BaseRunner {
|
|
|
7388
7416
|
await Graphic.drawRectangle(elRec, color, image);
|
|
7389
7417
|
}
|
|
7390
7418
|
#defineColor(status, string) {
|
|
7391
|
-
Logger.debug(
|
|
7419
|
+
Logger$1.debug(
|
|
7392
7420
|
`"${string}" - ${STATUS_COLOR[status][1]}${STATUS_INFO[status]}${"\x1B[0m"}`
|
|
7393
7421
|
);
|
|
7394
7422
|
return STATUS_COLOR[status][0];
|
|
@@ -7409,7 +7437,7 @@ class SanityRunner extends BaseRunner {
|
|
|
7409
7437
|
* @override
|
|
7410
7438
|
*/
|
|
7411
7439
|
async process(page) {
|
|
7412
|
-
Logger.info(`${page} loaded`);
|
|
7440
|
+
Logger$1.info(`${page} loaded`);
|
|
7413
7441
|
const src_img = joinPaths(
|
|
7414
7442
|
Reports.reviewedReports(page, this.getBaseImageName()),
|
|
7415
7443
|
this.getBaseImageName()
|
|
@@ -7493,7 +7521,7 @@ class Executor {
|
|
|
7493
7521
|
export {
|
|
7494
7522
|
Config as C,
|
|
7495
7523
|
Executor as E,
|
|
7496
|
-
Logger as L,
|
|
7524
|
+
Logger$1 as L,
|
|
7497
7525
|
Reports as R,
|
|
7498
7526
|
SYSTEM_TYPES as S,
|
|
7499
7527
|
getRootProjectMainDir as a,
|
package/package.json
CHANGED