0

I am trying to run parallel test through selenium grid.

I know I have to use "thread local" for parallel execution, but I have a problem with my code.

Cannot invoke "io.appium.java_client.android.AndroidDriver.findElementByAccessibilityId(String)" because "driver" is null

can you please solve it

package appiumset;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;

public class _2_Deviceinfo {
    
    
    public ThreadLocal<AppiumDriver> driver = new ThreadLocal<>();
    
    public void setDriver(AppiumDriver driver) {
        this.driver.set(driver);
    }
    
    public AppiumDriver getDriver() {
        return this.driver.get();
    }
    
    
    @Parameters({"device", "apppackage", "activity","version","appiumServer" , "systemPort", "platformName"})
    @BeforeMethod
    public synchronized void deviceSetUp(String device, String apppackage, String activity, String version, String appiumServer, String systemPort, String platformName) throws InterruptedException, MalformedURLException {
        System.out.println("****************************************");
        System.out.println("Setting up device and desired capabilities");
        
        DesiredCapabilities cap = new DesiredCapabilities();
        URL url = new URL(appiumServer);
        
        setDriver(new AndroidDriver<>(url, cap));
        
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, device);
        cap.setCapability(MobileCapabilityType.UDID, device);
        cap.setCapability(AndroidMobileCapabilityType.SYSTEM_PORT, systemPort);
        cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 120);

        cap.setCapability(MobileCapabilityType.PLATFORM_NAME, platformName);
        //cap.setCapability(MobileCapabilityType., BrowserType.ANDROID);
        cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, version);
        
    
        
        cap.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, apppackage);
    
        cap.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, activity);
    
        cap.setCapability("automationName", "UiAutomator2");

        cap.setCapability("noReset","false");
        cap.setCapability("FullReset","true");
    
        cap.setCapability("APP_WAIT_ACTIVITY", "*");
        cap.setCapability("autowebview","false");
        
        
    }
    
    
    @AfterMethod
    public void closeDriver() {
        getDriver().quit();
    

    }
}

I can't find the driver (AppiumDriver)

package appiumset;

import java.net.MalformedURLException;
import java.util.concurrent.TimeUnit;

import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;


public class _3_Onboarding extends _1_Appstart { 
    

    @Test
    public void onboarding() throws MalformedURLException, InterruptedException  {

        
        System.out.println("_3_Onboarding Start");
        
        MobileElement arrow = driver.findElementByAccessibilityId("next");   
        arrow.click();
        System.out.println("next-done");
    }
    
}
M i
  • 1
  • 1

1 Answers1

0

call getdriver() method of your class _2_Deviceinfo to your test class. Appiumdriver<?> driver = getDriver();

MobileElement arrow = driver.findElementByAccessibilityId("next");
arrow.click();

vinay
  • 1
  • 1
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Nov 05 '22 at 02:50