< All Topics

Multiple page/step validations

In most of web applications we have multiple pages. 15- 20 pages are common for any medium sized application. So in those cases we may need to test multiple pages in a single test case.

This situation can be handled by adding more steps in same test case. TestRunID would remain same for all the steps.

package Refined;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.codec.binary.Base64;
import org.json.simple.JSONObject;
import io.restassured.RestAssured;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import javax.imageio.ImageIO;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;

public class fullpageAshot {

	static WebDriver driver;

	public static void main(String args[]) throws Exception
		//Using selenium Launch browser and navigate to URL
		System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\Desktop\\selenium\\chromedriver.exe");
		driver = new ChromeDriver();
		// change the position from sticky to relative to remove stickiness
		((JavascriptExecutor) driver).executeScript("document.getElementsByClassName(\"navbar navbar-expand navbar-dark flex-column flex-md-row bd-navbar\")[0].style.position='relative';");
		//Get full page screenshot using Ashot and generate base64 image
		Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
		ByteArrayOutputStream out = new  ByteArrayOutputStream(); 
		ImageIO.write(screenshot.getImage(),"PNG", out);
		byte[] bytes = out.toByteArray();
		String imagebase64 = Base64.encodeBase64String(bytes);		
		//Get unique TestRunID for a specific project using Project key and Test name
		String uid = getUID("Multi Page", "fca709ea-d527-4f30-abc2-fa7e2af8afaf");
		//Send a Validate Request using the Unique TestID, Step name & Base64 Image 
		postRequest("Step 1 - Sticky",uid,imagebase64);
		///For Page 2
		//Get full page screenshot using Ashot and generate base64 image
		screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
		out = new  ByteArrayOutputStream(); 
		ImageIO.write(screenshot.getImage(),"PNG", out);
		bytes = out.toByteArray();
		imagebase64 = Base64.encodeBase64String(bytes);		
		//Same TestRunID will be used for multiple pages of same test cases
		//Send a Validate Request using the Unique TestID, Step name & Base64 Image 
		postRequest("Step 2 - Google",uid,imagebase64);
	//Get unique Test ID for a specific project using Rest Assured 
	public static String getUID(String testName, String projectKey) {
		try {
			RequestSpecification request = RestAssured.given();
			request.header("content-type", "application/json");
			JSONObject json = new JSONObject();
			json.put("TestName", testName);
			json.put("ProjectKey", projectKey);
			Response response = request.when().post("");
			int code = response.getStatusCode();
			String response_id = response.getBody().asString();
			System.out.println("TestID: " + response_id);
			return response_id;
		} catch (Exception ex) {
			return ex.toString();

	//Post a request using
	public static void postRequest(String stepName, String uid, String imagebase64) throws IOException {
		RequestSpecification request1 = RestAssured.given();
		request1.header("content-type", "application/json");
		JSONObject jo = new JSONObject();
		jo.put("TestRunID", uid.replace("\"", ""));
		jo.put("StepName", stepName);
		jo.put("ImageBase64", imagebase64);
		System.out.println("imagebase64:" + imagebase64);
		Response response1 = request1.when().post("");
		String response_id1 = response1.getBody().asString();
		System.out.println("Response: " + response_id1);