0

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

  • Does this answer your question? [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Jens Nov 02 '22 at 08:01

0 Answers0