How Can We Help?
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();
driver.manage().window().maximize();
driver.get("https://getbootstrap.com/docs/4.0/utilities/position/");
// 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
driver.get("https://www.google.com");
//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);
driver.quit();
}
//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);
request.body(json.toJSONString());
Response response = request.when().post("http://192.168.20.13:90/api/GetUID");
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);
request1.body(jo.toJSONString());
Response response1 = request1.when().post("http://192.168.20.13:90/api/Validate");
String response_id1 = response1.getBody().asString();
System.out.println("Response: " + response_id1);
}
}