0

I am restricted from using internet and hence cannot use Maven. I am working on TestNG by placing all the required dependency jars manually into IntelliJ. When running testng.xml file, I get the error: rg.testng.ITestNGListener: Provider io.qameta.allure.testng.AllureTestNg could not be instantiated

Here are the dependencies for allure reports (TestNG 7.8.0, Selenium 4.9 are there).

Allure dependencies:

  • allure-testng 2.23.0
  • allure-model 2.23.0
  • allure-attachments 2.23.0
  • allure-java-commons 2.23.0
  • allure-descriptions-javadoc 2.23.0
  • aspectjweaver 1.9.19
  • jaxb-api 2.3.1

I tried to get an answer but in vain. Please help! Note: I have allure binaries (2.23.0) set to environment variables, and the version in command prompt shows as 2.23.0

Here is my code: TestBase (My base class)

package tests;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.ITestContext;
import org.testng.annotations.Listeners;
import utils.AllureListener;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Set;

public class TestBase {
    public static WebDriver driver;
    public static Properties prop;

    public static int TIMEOUT = 60;

    public static ThreadLocal<WebDriver> tdriver = new ThreadLocal<WebDriver>();

    public TestBase() {
        try {
            prop = new Properties();
            FileInputStream fis = new FileInputStream(System.getProperty("user.dir") + "/src/testDAta/config.properties");
            prop.load(fis);
        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }
    }

    public WebDriver setup() {
        System.setProperty("webdriver.edge.driver", System.getProperty("user.dir") + prop.getProperty("edge.path"));
        driver = new EdgeDriver();
        driver.manage().window().maximize();
//        context.setAttribute("driver", driver);
        tdriver.set(driver);
        return getDriver();
    }
    public void getURL(String url){
        if (url.equalsIgnoreCase("google")) {
            driver.get(prop.getProperty("web.urlG"));
        } else if (url.equalsIgnoreCase("yahoo")) {
            driver.get(prop.getProperty("web.urlY"));
        } else {
            System.out.println("none!");
        }
    }

    public static synchronized WebDriver getDriver(){
        return tdriver.get();
    }

    public void waitAndClickElement(WebElement element) {
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(TIMEOUT));
        wait.until(ExpectedConditions.elementToBeClickable(element)).click();
    }
    public void waitForElementToAppear(WebElement element){
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(TIMEOUT));
        wait.until(ExpectedConditions.visibilityOf(element));
    }

    public void switchWindow(int idx){
        Set<String> allHandles = driver.getWindowHandles();
        List<String> handlesList = new ArrayList<>(allHandles);
        System.out.println("Handles: " + handlesList);
        driver.switchTo().window(handlesList.get(idx));

    }
    public void captureScreenshot(String screenshotName){
        try{
            TakesScreenshot ts = (TakesScreenshot) driver;
            File srcFile = ts.getScreenshotAs(OutputType.FILE);
            String destPath = System.getProperty("user.dir") + "/screenshots/" + screenshotName + ".png";
            File destFile = new File(destPath);
            FileUtils.copyFile(srcFile, destFile);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

AllureListener class

package utils;

import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

import io.qameta.allure.Attachment;
import tests.TestBase;

public class AllureListener implements ITestListener {

    private static String getTestMethodName(ITestResult iTestResult) {
        return iTestResult.getMethod().getConstructorOrMethod().getName();
    }

    @Attachment
    public byte[] saveFailureScreenShot(WebDriver driver) {
        return ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
    }

    @Attachment(value = "{0}", type = "text/plain")
    public static String saveTextLog(String message) {
        return message;
    }


    @Override
    public void onStart(ITestContext iTestContext) {
        System.out.println("I am in onStart method " + iTestContext.getName());
        iTestContext.setAttribute("WebDriver", TestBase.getDriver());
    }

    @Override
    public void onFinish(ITestContext iTestContext) {
        System.out.println("I am in onFinish method " + iTestContext.getName());
    }

    @Override
    public void onTestStart(ITestResult iTestResult) {
        System.out.println("I am in onTestStart method " + getTestMethodName(iTestResult) + " start");
    }

    @Override
    public void onTestSuccess(ITestResult iTestResult) {
        System.out.println("I am in onTestSuccess method " + getTestMethodName(iTestResult) + " succeed");
    }

    @Override
    public void onTestFailure(ITestResult iTestResult) {
        System.out.println("I am in onTestFailure method " + getTestMethodName(iTestResult) + " failed");
        Object testClass = iTestResult.getInstance();
        WebDriver driver = TestBase.getDriver();
        // Allure ScreenShot and SaveTestLog
        if (driver instanceof WebDriver) {
            System.out.println("Screenshot captured for test case:" + getTestMethodName(iTestResult));
            saveFailureScreenShot(driver);
        }
        saveTextLog(getTestMethodName(iTestResult) + " failed and screenshot taken!");
    }


    @Override
    public void onTestSkipped(ITestResult iTestResult) {
        System.out.println("I am in onTestSkipped method " + getTestMethodName(iTestResult) + " skipped");
    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) {
        System.out.println("Test failed but it is in defined success ratio " + getTestMethodName(iTestResult));
    }

}

HomePage.java (PageObject class)

package pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import tests.TestBase;

public class HomePage extends TestBase {
    public WebDriver driver;
    public HomePage(WebDriver driver){
//        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(id = "getwebsitebtn")
    WebElement txtLink;

    @FindBy(xpath = "//*[text()='Get Started for Free']")
    WebElement getFreeBtn;

    public void linkTest(){
        waitAndClickElement(txtLink);
        switchWindow(1);
        waitAndClickElement(getFreeBtn);
    }

}

TestFile.java (Test class)

package tests;

import org.testng.ITestContext;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import pages.HomePage;
import utils.AllureListener;

import java.io.IOException;

@Listeners({AllureListener.class})
public class testFile extends TestBase{


    @BeforeClass
    public void setItUp(){
        setup();
    }


    @Test
    public void urlTest() throws IOException {

        // Call the setup method to initialize the driver
//        getURL("Yahoo"); // You can change this to "Google" or other URLs as needed
//        extentTest = ExtentTestManager.getTest();
        getURL("Yahoo");

        HomePage hp = new HomePage(driver); // Initialize the HomePage object after the driver is set up
        hp.linkTest();

        System.out.println(System.getProperty("user.dir"));

    }

}

testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
    <test verbose="2" preserve-order="true" name="E:/bkup2/frmwrk">
        <classes><class name="tests.testFile">
            <methods><include name="urlTest"/>
            </methods>
        </class>
        </classes>
    </test>
</suite>

Error:

java.util.ServiceConfigurationError: org.testng.ITestNGListener: Provider io.qameta.allure.testng.AllureTestNg could not be instantiated
    at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
    at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
    at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
    at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
    at org.testng.TestNG.addServiceLoaderListeners(TestNG.java:1032)
    at org.testng.TestNG.initializeConfiguration(TestNG.java:966)
    at org.testng.TestNG.initializeEverything(TestNG.java:1063)
    at org.testng.TestNG.run(TestNG.java:1074)
    at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
    at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
Caused by: java.lang.NoClassDefFoundError: io/qameta/allure/testfilter/FileTestPlanSupplier
    at io.qameta.allure.testng.AllureTestNgTestFilter.<init>(AllureTestNgTestFilter.java:40)
    at io.qameta.allure.testng.AllureTestNg.<init>(AllureTestNg.java:164)
    at io.qameta.allure.testng.AllureTestNg.<init>(AllureTestNg.java:168)
    at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484)
    at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: io.qameta.allure.testfilter.FileTestPlanSupplier
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 15 more

Process finished with exit code -1

0 Answers0