Monday, September 2, 2019

How to Take specific Element screenshot in Appium | Mobile Automation


How to Take specific Element screenshot in Appium | Mobile Automation:


Lets us learn how to take screenshot for the specific element, following method i'm using to get screenshot:


public static String elementScreenshot(AppiumDriver<MobileElement> driver, MobileElement ele)
 {
  
  File screenshotLocation = null;
  try{
  File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
  
  BufferedImage  fullImg = ImageIO.read(scrFile);
  //Get the location of element on the page
  Point point = ele.getLocation();
  //Get width and height of the element
  int eleWidth = ele.getSize().getWidth();
  int eleHeight = ele.getSize().getHeight();
  //Crop the entire page screenshot to get only element screenshot
  BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth,
      eleHeight);
  ImageIO.write(eleScreenshot, "png", scrFile);

   String path = "screenshots/" + UUID.randomUUID() + "" + ".png";
  
  screenshotLocation = new File(System.getProperty("user.dir") + "/" + path);
  FileUtils.copyFile(scrFile, screenshotLocation);
  
      System.out.println(screenshotLocation.toString());
  
  
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
  return screenshotLocation.toString();


  }
it will get the element width and height then takes the element screenshot then crop the entire page screenshot to get only element screenshot.

Complete code for taking screenshot of specific element:


package practise;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

import javax.imageio.ImageIO;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Point;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;

public class TakeElementScreenshot {
 
 AppiumDriver<MobileElement> driver;
 
 @BeforeClass
 public void setUp() throws MalformedURLException
 {
 DesiredCapabilities cap=new DesiredCapabilities();
     cap.setCapability("deviceName", "emulator-5554");
     cap.setCapability("udid", "emulator-5554");
     cap.setCapability("appActivity", "com.android.calculator2.Calculator");
     cap.setCapability("appPackage", "com.android.calculator2");
     cap.setCapability("platformName", "Android");
     cap.setCapability("platformVersion", "9.0");
     driver=new AppiumDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"), cap);
     driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
 }
 
 @Test
 public void testExample(){
 
 MobileElement oneBtn=driver.findElement(By.id("com.android.calculator2:id/digit_1"));
 oneBtn.click();
 MobileElement plusBtn=driver.findElement(By.id("com.android.calculator2:id/op_add"));
 plusBtn.click();
 MobileElement fiveBtn=driver.findElement(By.id("com.android.calculator2:id/digit_5"));
 fiveBtn.click();
 MobileElement equalToBtn=driver.findElement(By.id("com.android.calculator2:id/eq"));
 equalToBtn.click();
 
 //passing equalToBtn element to take screenshot
 elementScreenshot(driver,equalToBtn);
 }
 
 

  @AfterClass
 public void tearDown(){
 driver.quit();
 }
 
 
 public static String elementScreenshot(AppiumDriver<MobileElement> driver,MobileElement ele)
 {
 
 File screenshotLocation = null;
 try{
 File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
 
 BufferedImage  fullImg = ImageIO.read(scrFile);
 //Get the location of element on the page
 Point point = ele.getLocation();
 //Get width and height of the element
 int eleWidth = ele.getSize().getWidth();
 int eleHeight = ele.getSize().getHeight();
 //Crop the entire page screenshot to get only element screenshot
 BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth,
     eleHeight);
 ImageIO.write(eleScreenshot, "png", scrFile);

  String path = "screenshots/" + UUID.randomUUID() + "" + ".png";
 
 screenshotLocation = new File(System.getProperty("user.dir") + "/" + path);
 FileUtils.copyFile(scrFile, screenshotLocation);
 
      System.out.println(screenshotLocation.toString());
  
  
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 return screenshotLocation.toString();


  }

}


Taken Screenshot:






No comments:

Post a Comment

If any suggestions or issue, please provide