Cómo conseguir WebDriver para mi clase de Escucha cuando se utiliza "público ThreadLocal<WebDriver> webdriver = new ThreadLocal<WebDriver>();" método de

0

Pregunta

Sigo recibiendo NullPointerException para mi Oyente WebDriver. es esto debido a que utiliza ThreadLocal en mi WebDriver en la clase base? si es así ¿cómo puedo obtener los casos de prueba del controlador para mi oyente onTestSuccess método?

Esta es mi Clase de Escucha:

@Override
    public void onTestSuccess(ITestResult result) {
        extentTest.get().log(Status.PASS,"Test Passed");
        WebDriver driver = null;
        Object testObject = result.getInstance();
        Class clazz = result.getTestClass().getRealClass();
        try {
            driver = (WebDriver)clazz.getField("webdriver").get(testObject);
        } catch (Exception e) {
        }
        try {
            extentTest.get().addScreenCaptureFromPath(getScreenShotPath(result.getMethod().getMethodName(), driver), result.getMethod().getMethodName());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

BaseClass:

public ThreadLocal<WebDriver> webdriver = new ThreadLocal<WebDriver>();


@BeforeClass
public void setup() {
    Reporter.log("@@@@@ Setup @@@@@",true);
    ExtentReports extent = ExtentReport.extentReportGenerator();
}


@BeforeMethod
public void startBrowser() {
    WebDriverFactory webDriverFactory = new WebDriverFactory();
    webDriverFactory.setDriver();
    webdriver.set(webDriverFactory.getDriver());
    webdriver.get().get(baseURL);

La Prueba De La Clase:

@Test(dataProvider = "jsonData", dataProviderClass = TestData.class)
public void  testAggregator(String jSon) throws ParseException {
    extent.createTest("Test The Welcome Page");
    welcomePageImpl = new WelcomePageImpl(webdriver.get());
    welcomePageImpl.getAggregatorRequest(webdriver.get(),jSon);
}

Excepción:

java.lang.NullPointerException
    at main.java.com.shoppingCart.testCases.BaseClass.getScreenShotPath(BaseClass.java:71)
    at main.java.com.shoppingCart.utilities.Listeners.onTestSuccess(Listeners.java:37)
    at org.testng.internal.TestListenerHelper.runTestListeners(TestListenerHelper.java:70)
    at org.testng.internal.TestInvoker.runTestResultListener(TestInvoker.java:219)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:651)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:816)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
java selenium selenium-webdriver testng
2021-11-24 03:29:52
1

Mejor respuesta

0

El problema está en el código de prueba.

onSuccess NO está garantizado por TestNG para que se ejecute en el mismo hilo como su método de prueba.

Para solucionar esto, por favor refactorizar su escucha para utilizar beforeInvocation y afterInvocation a través de la TestNG escucha de la interfaz org.testng.IInvokedMethodListener debido a que se garantiza la ejecución en el mismo hilo (que yo recuerde).

2021-11-24 06:30:25

Sí lo he probado y me enteré de que su creación prueba para cada método. Quiero algo donde se puede conseguir el único @ método de Prueba y crear capturas de pantalla cuando se produce un error o pasar por debajo de la @ método de prueba del título en el reportero.
Alvin

encontrado el problema.
Alvin

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................