M_i
1
The app runs, but only one of the two runs or stops in the middle.
I need to use “ThreadLocal” but I can’t.
Can you help me?
protected static AppiumDriver<MobileElement> driver;
@Parameters({"device", "apppackage", "activity","version","appiumServer"})
@BeforeClass
public void deviceSetUp(String device, String apppackage, String activity, String version, String appiumServer) throws InterruptedException, MalformedURLException, InterruptedException {
System.out.println("****************************************");
System.out.println("Setting up device and desired capabilities");
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(MobileCapabilityType.DEVICE_NAME, device);
cap.setCapability(MobileCapabilityType.UDID, device);
cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 120);
cap.setCapability(MobileCapabilityType.PLATFORM_NAME, Platform.ANDROID);
//cap.setCapability(MobileCapabilityType., BrowserType.ANDROID);
cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, version);
//"com.hanwha.lifeplus.tribes.app.qa"
cap.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, apppackage);
//"com.hanwha.lifeplus.presentation.ui.HomeActivity"
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");
URL url = new URL(appiumServer);
driver = new AndroidDriver<MobileElement>(url, cap);
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
}
M_i
3
I used thread local but couldn’t find the driver in @test.
It’s been a week since the challenge… can you help?
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.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
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();
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.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");
URL url = new URL(appiumServer);
setDriver(new AndroidDriver(url, cap));
}
MobileElement arrow = driver.findElementByAccessibilityId(“next”);
Can’t find “driver” in this code…
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();
Thread.sleep(2000);
arrow.click();
Thread.sleep(2000);
arrow.click();
Thread.sleep(2000);
System.out.println("next-done");
}
}
Aleksei
4
This is BaseTest. Any test should extend it. Driver inside BaseTest is
public ThreadLocal<AppiumDriver> driver = new ThreadLocal<>();
M_i
5
I can not understand…!
Please look at the image
The Threadlocal driver does not support AccessiBility iD
This is threadLocal variable. You can use it directly.
You need use get or set.
E.g. driver.get().findElement…
M_i
7
thank you first
I tried apium while checking your posts and comments written in other places.
So appium is running successfully.
and I found that you have to use threadlocal because of you.
But I think there is another problem
I can’t see “findElementByAccessibilityId()” in my parallel test scrpit as in the image below.
I’ve checked my maven, testng again but can’t find the problem.
I think this is causing “java.lang.NullPointerException”
Do you have any idea how to solve the problem?
< not parallel test >
< parallel test >
Just cast with Android or iOS driver.
((AndroidDriver) driver.get()).find...