This was not givving any issue if I call the function by creating the new object and passing the driver but when I made changes to each function to return the object of the next class in page object. then this issue is started appearing. Listeners file `
import java.io.IOException;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.Status;
import MobileApp.BillGenratorMobileApp2.Utils.ReusableMethods;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
public class Listeners extends BaseClass implements ITestListener{
AndroidDriver driver;
ExtentReports extent= getExtentReporters.gettreporterObject();
ExtentTest test;
@Override
public void onTestStart(ITestResult result) {
// TODO Auto-generated method stub
ITestListener.super.onTestStart(result);
test= extent.createTest(result.getMethod().getMethodName());
}
@Override
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
ITestListener.super.onTestSuccess(result);
test.log(Status.PASS ,"Test Pass");
}
@Override
public void onTestFailure(ITestResult result) {
// TODO Auto-generated method stub
ITestListener.super.onTestFailure(result);
test.fail(result.getThrowable());
try {
driver = (AndroidDriver) result.getTestClass().getRealClass().getField("driver").get(result.getInstance());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
test.addScreenCaptureFromPath(getScreenshotPath(result.getMethod().getMethodName(),driver), result.getMethod().getMethodName());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
`
Base Class file `
public class BaseClass {
protected AndroidDriver driver;
WebDriver webdriver1;
AppiumDriverLocalService service;
ExtentReports extent;
public String CustomerServiceNo;
public String url;
public final String[] verifyContentInPDf1 = null;
public Properties propConnection = new Properties();
public Dashboard dashboard;
public SideNevigationMenu SideNevigationMenu;
public ReusableMethods ReusableMethods;
public UtiltiyFormStep1 utilityFormsStep1;
public UtilityFormStep2 utilityFormsStep2;
public UtiltiyFormStep3 utilityFormsStep3;
public FlashScreen flashscreen;
public LoginScreen loginScreen;
public W2FormStep1 W2FormStep1;
public W2FormStep2 W2FormStep2;
public W2FormStep3 W2FormStep3;
public W2FormStep4 W2FormStep4;
public W2FormStep5 W2FormStep5;
public W2FormStep6 W2FormStep6;
@BeforeTest
public void configuration() throws IOException {
FileInputStream inputstreemconnection = new FileInputStream(
System.getProperty("user.dir") + "\\src\\main\\java\\MobileApp\\dataResource\\Connection.properties");
FileInputStream inputstreemLoginData = new FileInputStream(
System.getProperty("user.dir") + "\\src\\main\\java\\MobileApp\\dataResource\\LoginData.properties");
FileInputStream inputstreemUtilityData = new FileInputStream(
System.getProperty("user.dir") + "\\src\\main\\java\\MobileApp\\dataResource\\UtilityData.properties");
FileInputStream inputstreemCommonData = new FileInputStream(
System.getProperty("user.dir") + "\\src\\main\\java\\MobileApp\\dataResource\\CommonData.properties");
FileInputStream inputstreemW2Data = new FileInputStream(
System.getProperty("user.dir") + "\\src\\main\\java\\MobileApp\\dataResource\\W2Data.properties");
propConnection.load(inputstreemconnection);
propConnection.load(inputstreemLoginData);
propConnection.load(inputstreemUtilityData);
propConnection.load(inputstreemCommonData);
propConnection.load(inputstreemW2Data);
String port = propConnection.getProperty("Port");
service = new AppiumServiceBuilder()
.withAppiumJS(new File(
"C:\\Users\\Marquee\\AppData\\Roaming\\npm\\node_modules\\appium\\build\\lib\\main.js"))
.withIPAddress(propConnection.getProperty("IPAddress")).usingPort(Integer.parseInt(port)).build();
service.start();
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "12");
desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
desiredCapabilities.setCapability("appPackage", "com.example.billgenerator");
desiredCapabilities.setCapability("appActivity", "com.example.billgenerator.MainActivity");
// UiAutomator2Options options = new UiAutomator2Options();
// options.setPlatformName("Android");
// options.setPlatformVersion("12");
// options.setDeviceName("Pixel_2_API_31");
// options.setAutomationName("uiautomator2");
// options.setAppPackage("com.example.billgenerator");
// options.setAppActivity("com.example.billgenerator.MainActivity");
// OR use 127.0.0.1:4723
driver = new AndroidDriver(new URL("http://0.0.0.0:4723"), desiredCapabilities);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
try {
FileUtils.forceDelete(new File(System.getProperty("user.dir") + "\\reports"));
} catch (IOException e) {
e.printStackTrace();
}
flashscreen = new FlashScreen(driver);
}
public String getScreenshotPath(String testCaseName, AndroidDriver driver) throws IOException {
File source1 = driver.getScreenshotAs(OutputType.FILE);
String destinationfile1 = System.getProperty("user.dir") + "\\reports\\FailTestCasesScreenshots\\"
+ testCaseName + ".png";
FileUtils.copyFile(source1, new File(destinationfile1));
return destinationfile1;
}
The test that got failed.
@Test(priority = 3)
public void verifyCouponCodeFunctionalityWithValidCode() {
SoftAssert softAssertion3 = new SoftAssert();
orderp.enterCoupenCode(propConnection.getProperty("CouponCode"));
nos_calls = orderp.pressApplyCouponButton();
if (orderp.getTotalAmount().equals(" $ 0.0")) {
softAssertion3.assertTrue(true);
} else {
softAssertion3.assertTrue(false, "Coupon not applied");
}
nos_calls += 1;
softAssertion3.assertAll();
}
`
Expecting the extent report to show the screenshot on test failure