All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.codacy.scoobydoo.utils.Utils Maven / Gradle / Ivy

package com.codacy.scoobydoo.utils;

import com.codacy.scoobydoo.LoggingHelper;
import org.openqa.selenium.By;
import org.testng.asserts.SoftAssert;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.Duration;
import java.util.Base64;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Utils {

    public static class ElementProperty {
        public static final String CLICKABLE = "clickable";
        public static final String VISIBLE = "visible";
    }

    // suppressed default constructor for noninstantiability.
    private Utils() {
        throw new AssertionError("Utils class should not be instantiated.");
    }

    public static void assertStringHasValue(String targetString) {
        if (targetString == null || targetString.isBlank() || targetString.isEmpty()) {
            throw new IllegalArgumentException("String cannot be null or empty.");
        }
    }

    public static String getAPIRequestPayloadFromJsonFilename(String fileName) {

        final String jsonFilePath= "src/test/resources/payloads/" + fileName;

        try{
            return new String(Files.readAllBytes(Paths.get(jsonFilePath)));
        }catch (Exception e){
            LoggingHelper.error("Could not get payload from file: [" + jsonFilePath + "].", e);
            throw new RuntimeException(e);
        }
    }

    public static String getEncodedCursor(int cursor) {
        return Base64.getEncoder().encodeToString(String.valueOf(cursor).getBytes());
    }

    public static String getSubstring(String inputString, String regexPattern) {
        Matcher matcher = Pattern.compile(regexPattern).matcher(inputString);
        return matcher.find() ? matcher.group(1) : "";
    }

    public static String getWaitErrorLogMessage(By locator, String property, Duration timeout) {
        return String.format("Element [%s] was not [%s] after a timeout of [%s] seconds.",
                locator.toString(), property, timeout.getSeconds());
    }

    public static String getWaitLogMessage(By locator, String property, Duration timeout, Duration polling) {
        return String.format("Wait for element [%s] to be [%s] with a timeout of [%s] seconds and polling [%s] milliseconds.",
                locator.toString(), property, timeout.getSeconds(), polling.toMillis());
    }

    /**
     * Runs all the provided teardown methods, ignoring any exceptions that might occur, to ensure all steps are performed.
     * In the end, a soft assertion is performed to ensure that all teardown methods were executed successfully.
     */
    public static void runAllTeardownMethodsIgnoringExceptions(List teardownMethods) {

        SoftAssert softAssertions = new SoftAssert();

        for (Runnable method : teardownMethods) {
            try {
                method.run();
            } catch (Exception | AssertionError e) {
                final String errorMessage = "Failed while running teardown method.";
                softAssertions.fail(errorMessage);
                LoggingHelper.error(errorMessage, e);
            }
        }

        softAssertions.assertAll();
    }

    public static void runMethodWithRetries(Runnable runnable, int maxRetries) {

        int attempt = 0;

        while(attempt <= maxRetries) { // loop will never reach maxRetries, but this check is here in order to ensure no infinite loops will ever happen.
            try {
                runnable.run();
                break;
            } catch (AssertionError | Exception e) {
                LoggingHelper.error("Failed while trying to run method.", e);
                attempt++;
                if (attempt >= maxRetries) {
                    throw e;
                }
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy