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

in.Visual Maven / Gradle / Ivy

package in;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;

import org.json.JSONObject;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;

public class Visual {
	private static String accessKey = null;
	private static String lastJsonResult = null;
	private static String lastResultUrl = null;
	private static String lastSummary = null;
	private static boolean debug = false;
	public static boolean verify(WebDriver driver, String pageName) {
		boolean status = false;
		lastJsonResult = null;
		lastResultUrl = null;
		lastSummary = null;
		if(accessKey == null) {
			accessKey = System.getProperty("visual_accessKey");
			if(accessKey == null || accessKey.isEmpty()) {
				accessKey = System.getenv("visual_accessKey");
				if(accessKey == null || accessKey.isEmpty()) {
					throw new RuntimeException("accessKey was not configured. You have a few options to configure accessKey:\n 1. Use Visual.setAccessKey(...).\n 2. Use system propery: 'visual_accessKey'.\n 3. or use an environment variable: 'visual_accessKey'\n");
				}
			}
		}
		try {
			String script = executePost("https://gxy1ugjy4c.execute-api.us-east-1.amazonaws.com/dev", "{\"accessKey\": \"" + accessKey + "\",\"pageName\":\"" + pageName + "\"}").trim();
			if(script.startsWith("\"")) {
				script = script.substring(1);
			}
			if(script.endsWith("\"")) {
				script = script.substring(0, script.length() - 1);
			}
			script = new String( Base64.getDecoder().decode(script), "UTF-8");
			if(debug) {
				System.out.println(script);
			}
			String body = (String)((JavascriptExecutor)driver).executeScript(script);
			if(debug) {
				System.out.println(body);
			}
			String screenShotBase64 = ((TakesScreenshot )driver).getScreenshotAs(OutputType.BASE64);
			body = body.replace("<>", screenShotBase64);
			lastJsonResult = executePost("https://f3a265wlhl.execute-api.us-east-1.amazonaws.com/dev", body);
			if(debug) {
				System.out.println(lastJsonResult);
			}
			JSONObject json = new JSONObject(lastJsonResult);
			if(json.has("resultUrl")) {
				lastResultUrl = json.getString("resultUrl");
			}
			if(json.has("status")) {
				status = json.getBoolean("status");
			}
			if(json.has("summary")) {
				lastSummary = json.getString("summary");
				System.out.println("Visual verify page: " + pageName);
				System.out.println(lastSummary);
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return status;
	}
	
	public static String getLastJsonResult() {
		return lastJsonResult;
	}
	public static void setLastJsonResult(String lastJsonResult) {
		Visual.lastJsonResult = lastJsonResult;
	}
	public static String getLastResultUrl() {
		return lastResultUrl;
	}
	public static void setLastResultUrl(String lastResultUrl) {
		Visual.lastResultUrl = lastResultUrl;
	}
	public static String getLastSummary() {
		return lastSummary;
	}
	public static void setLastSummary(String lastSummary) {
		Visual.lastSummary = lastSummary;
	}
	public static boolean isDebug() {
		return debug;
	}
	public static void setDebug(boolean debug) {
		Visual.debug = debug;
	}
	public static void setAccessKey(String accessKey) {
		Visual.accessKey = accessKey;
	}

	private static String executePost(String urlTxt, String body) throws Exception{
		URL url = new URL(urlTxt);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setDoOutput(true);
		conn.setRequestMethod("POST");
		conn.setRequestProperty("Content-Type", "application/json");

		String input = body;

		OutputStream os = conn.getOutputStream();
		os.write(input.getBytes());
		os.flush();

		if (conn.getResponseCode() != 200) {
			throw new RuntimeException("Failed : HTTP error code : "
				+ conn.getResponseCode());
		}
		BufferedReader br = new BufferedReader(new InputStreamReader(
				(conn.getInputStream())));
		StringBuffer buf = new StringBuffer();
		String output;
		while ((output = br.readLine()) != null) {
			buf.append(output); buf.append("\r\n");
		}
		conn.disconnect();
		return buf.toString();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy