Powered By Blogger

Search Here!

Tuesday, October 8, 2024

Read Excel Content


const XLSX = require("xlsx");
/*
 * Reads content from a specified or latest downloaded Excel file.
 *
 * @param {string|null} [fileName=null] - The name of the Excel file.
*If null, the latest downloaded file will be used.
 * @param {number|null} [rowToCheck=null] - The row number in the
 *Excel content to retrieve (1-based index). If null, all rows will
 *be returned.
 * @returns {Promise<Object|Object[]>} - The content of the
*specified row or all rows if rowToCheck is not provided.
 */
async function getExcelContent(fileName = null, rowToCheck = null) {
    // Define the download directory path
    const downloadDir = CONSTANTS.FILE.FILE_PATH;

    let excelFilePath;

    if (fileName !== null) {
        // Use the provided filename to construct the file path
        excelFilePath = `${downloadDir}/${fileName}`;
        console.log(`Reading content from the specified file:
                        ${fileName}`);
    } else {
        // Get the latest downloaded file name
        const latestDownloadedFileName =
                    await this.getLatestDownloadedFileName();

      // Construct the full path of the latest downloaded Excel file
        excelFilePath = `${downloadDir}/${latestDownloadedFileName}`;
        console.log(
            `Reading content from the latest downloaded file:
                        ${latestDownloadedFileName}`
        );
    }

    // Read the Excel file
    const workbook = XLSX.readFile(excelFilePath);
    const sheetName = workbook.SheetNames[0]; // Get the first sheet
    const sheet = workbook.Sheets[sheetName];
    const data = XLSX.utils.sheet_to_json(sheet);
    // Convert sheet to JSON

    // Print each row of the Excel content in a prettier format
    console.log(`Content of the file ${fileName ||
                                "latest downloaded Excel"}:`);
    data.forEach((row, index) => {
        console.log(`Row ${index + 1}:`);
        for (const [key, value] of Object.entries(row)) {
            console.log(`  ${key}: ${value}`);
        }
        console.log(""); // Add a blank line between rows for
                // readability
    });

    // Return data based on the specified row or all rows
    //if rowToCheck is not provided
    if (rowToCheck !== null) {
        if (rowToCheck < 1 || rowToCheck > data.length) {
           console.warn(`Row number ${rowToCheck} is out of range.`);
           return {}; // Return an empty object if the row number
                // is out of range
        }
        return data[rowToCheck - 1]; // Return the specified row
    }

    return data; // Return all rows
}

Get Pdf Page Counts

 

const pdfParse = require("pdf-parse"); 
* Retrieves the total number of pages in a specified or latest
downloaded PDF file.
 *
 * @param {string|null} [fileName=null] - The name of the PDF file.
*If null, the latest downloaded file will be used.
 * @returns {Promise<number>} - The total number of pages in the
*PDF file.
 */
async function getPdfPageCount(fileName = null) {
    // Define the download directory path
    const downloadDir = CONSTANTS.FILE.FILE_PATH;

    let pdfFilePath;

    if (fileName !== null) {
        // Use the provided filename to construct the file path
        pdfFilePath = `${downloadDir}/${fileName}`;
        console.log(`Getting page count from the specified file:
                        ${fileName}`);
    } else {
        // Get the latest downloaded file name
        const latestDownloadedFileName = await
                        this.getLatestDownloadedFileName();

        // Construct the full path of the latest downloaded PDF file
        pdfFilePath = `${downloadDir}/${latestDownloadedFileName}`;
        console.log(
            `Getting page count from the latest downloaded file:
                            ${latestDownloadedFileName}`
        );
    }

    // Read the PDF file
    const dataBuffer = fs.readFileSync(pdfFilePath);

    // Parse the PDF and extract data
    const data = await pdfParse(dataBuffer);

    // Return the total number of pages
    return data.numpages; // This will return the number of pages
    // starting from 1
}

Get Pdf Text Content Line Based

 

const pdfParse = require("pdf-parse"); 
* Reads the text content from a specified or latest downloaded
PDF file.
 *
 * @param {string|null} [fileName=null] - The name of the PDF file.
If null, the latest downloaded file will be used.
 * @param {number|null} [lineToCheck=null] - The line number in the
PDF content to retrieve (1-based index). If null, all lines will
be returned.
 * @returns {Promise<string|string[]>} - The text content of
the specified line or all lines if lineToCheck is not provided.
 */
async function getPdfTextContentLineBased(fileName = null,
                lineToCheck = null) {
    // Define the download directory path
    const downloadDir = CONSTANTS.FILE.FILE_PATH;

    let pdfFilePath;

    if (fileName !== null) {
        // Use the provided filename to construct the file path
        pdfFilePath = `${downloadDir}/${fileName}`;
        console.log(`Reading content from the specified file:
        ${fileName}`);
    } else {
        // Get the latest downloaded file name
        const latestDownloadedFileName =
                await this.getLatestDownloadedFileName();

        // Construct the full path of the latest downloaded PDF file
        pdfFilePath = `${downloadDir}/${latestDownloadedFileName}`;
        console.log(
            `Reading content from the latest downloaded file:
            ${latestDownloadedFileName}`
        );
    }

    // Read the PDF file
    const dataBuffer = fs.readFileSync(pdfFilePath);

    // Parse the PDF and extract text
    const data = await pdfParse(dataBuffer);

    // Split text into lines
    const lines = data.text.split("\n");

    // Print all lines of the PDF text content
    console.log(`Content of the file ${fileName ||
                    "latest downloaded PDF"}:`);
    console.table(
        lines.map((line, index) => ({ Line: index + 1,
                        Content: line.trim() }))
    );

    // Return text based on the specified line or all lines
if lineToCheck is not provided
    if (lineToCheck !== null) {
        if (lineToCheck < 1 || lineToCheck > lines.length) {
            console.warn(`Line number ${lineToCheck} is out of
                                           range.`);
            return ""; // Return an empty string if
the line number is out of range
        }
        return lines[lineToCheck - 1].trim(); // Return the
specified line
    }

    return lines.map((line) => line.trim()); // Return all lines
}

Tuesday, September 3, 2024

WebdriverIO onPrepare To check Url

 onPrepare: async function () {

        console.log("onPrepare setup started...");
        try {
            // make a request to a reliable server
            await axios.head("https://www.google.com/", { timeout:
            10000 }); // Replace the URL with any reliable server
            console.log("Internet is connected. cheers! 👍");
        } catch (error) {
            console.log("No internet connection or server is
            unreachable 🙄");
            process.exit(1); // Exit the process with an error code
        }
        // url to check accessibility
        const urlsToCheck = [
           "https://www.example.com",
           "https://www.example.com",
           "https://www.example.com",
           "https://www.example.com",
        ];
        for (const urlToCheck of urlsToCheck) {
            try {
                // Send a GET request to the URL
                const response = await axios.get(urlToCheck);
                // Check if the response status is in the
                   success range (e.g., 2xx)
                if (response.status >= 200 && response.status < 300)
                    {
                    console.log(
                        `Url ${urlToCheck} is accessible. Status:
                            ${response.status}` + "👍"
                    );
                } else {
                    console.error(
                        `Url ${urlToCheck} is not accessible.
                            Status: ${response.status}` +
                            "🙄"
                    );
                    await browser.close();
                    process.exit(1); // Exit the process with an
                    error code
                }
            } catch (error) {
                console.error(
                    `Error while checking accessibility of Url
                        ${urlToCheck}:`,
                    error.message
                );
                await browser.close();
                process.exit(1); // Exit the process with an
                error code
            }
        }
        //set maxInstances
        console.log(
            "Set chrome browser maxInstances: " +
                CONSTANT.CONFIG_SETTING.MAXINSTANCES_VALUE +
                "👍😀"
        );
        console.log("onPrepare setup completed..." + "👍👍👍😀");
    },

WebdriverIO Chrome Browser Capabilities For Windows & Linux Environment

wdio.conf.js
// Set the path to the Chromedriver executable based on the
operating system
const isWindows = os.platform() === "win32";
const chromedriverPath = isWindows
    ? "./driver/win/chromedriver.exe" // Path for Chromedriver
on Windows
    : "./driver/linux/chromedriver"; // Path for Chromedriver
on Linux

// Set the path to the Chrome binary based on the operating system
const chromeBinaryPath =
    os.platform() === "win32"
        ? "C:\\Program Files\\Google\\Chrome\\Application
        \\chrome.exe" // Path for Chrome on Windows
        : "/usr/bin/google-chrome"; // Default path for Chrome
on Linux

capabilities: [
        {
            //maxInstances can get overwritten per capability.
So if you have an in-house Selenium
            // grid with only 5 firefox instances available
you can make sure that not more than
            // 5 instances get started at a time.
            browserName: CONSTANT.CONFIG_SETTING.CHROME_BROWSER_NAME,
            acceptInsecureCerts: true,
            "goog:chromeOptions": {
                binary: chromeBinaryPath, // Set the Chrome
                binary path dynamically
                prefs: {
                    credentials_enable_service: false,
                    profile: {
                        password_manager_enabled: false,
                    },
                    w3c: true,
                    download: {
                        default_directory: path.join(process.cwd(),
                        "downloads"),
                        prompt_for_download: false,
                        directory_upgrade: true,
                        "safebrowsing.enabled": false,
                    },
                },
                args: [
                    ...(process.env.HEADLESS === "true"
                        ? ["--headless", "--disable-gpu",
                        "--window-size=1920,1080"]
                        // Configurations for headless mode
                        : []), // No additional args for
                        non-headless mode
                    "--disable-cache",
                    "--no-sandbox",
                    "--disable-dev-shm-usage",
                    "--disable-application-cache",
                    "--disable-offline-load-stale-cache",
                    "--disk-cache-size=0",
                    "--v8-cache-options=off",
                    "--disable-infobars",
                    "--kiosk-printing",
                ].filter(Boolean), // Filter out any empty strings
            },

    ],