import io.appium.java_client.MobileElement; import org.testng.IRetryAnalyzer; import org.testng.ITestResult; import io.appium.java_client.ios.IOSDriver; import org.apache.commons.io.FileUtils; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.DataProvider; import org.testng.annotations.Parameters; import java.io.File; import java.io.IOException; import java.util.Base64; /** * Retry Analyzer */ public class Retry implements IRetryAnalyzer { private int count = 0; private static int retry = 3; public IOSDriver driver; @Override public boolean retry(ITestResult result) { // Check if test not succeed if (!result.isSuccess()) { System.out.println("Failed ***********"); this.driver = ((Retry)result.getInstance()).driver; String s = driver.stopRecordingScreen(); byte[] decode = Base64.getDecoder().decode(s); String nameofCurrMethod = result.getMethod().getMethodName(); String video_name = nameofCurrMethod + "-" + count + ".mp4"; try { FileUtils.writeByteArrayToFile(new File(System.getProperty("user.dir") + "/fail-videos/" + video_name), decode); } catch (IOException e) { e.printStackTrace(); } if (count < retry) { count++; result.setStatus(ITestResult.FAILURE); return true; } else { // If maxCount reached,test marked as failed result.setStatus(ITestResult.FAILURE); } } else { result.setStatus(ITestResult.SUCCESS); } return false; } }