gpt4 book ai didi

java - Appium:我有 2 个类,ClassA 和 ClassB。我正在使用 testng.xml 文件执行这 2 个类。我想知道 ClassB 的数据,我需要放置 @Beforeclass 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:23 25 4
gpt4 key购买 nike

第一类:

public class LaunchApp {

AndroidDriver<WebElement> driver;

@BeforeTest
public void Test1() throws MalformedURLException {

DesiredCapabilities capability = new DesiredCapabilities();

capability.setCapability("deviceName", "Android");
capability.setCapability("platformName", "Android");
capability.setCapability("platformVersion", "5.1.1");
capability.setCapability("deviceName", "Samsung Galaxy On5");
capability.setCapability("app",
"D:\\whatsapp.apk");
capability.setCapability("PackageName",
"com.movocado.socialbostonsports");
capability.setCapability("ActivityName",
"com.movocado.socialbostonsports.Activity.LogInSceen");

try {
driver = new AndroidDriver<WebElement>(new URL(
"http://127.0.0.1:4723/wd/hub"), capability);
} catch (MalformedURLException e) {
e.printStackTrace();
}

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

}

2级:

public class DrawerMenuTest {
AndroidDriver<WebElement> driver;

@Test(priority = 1)
public void DrawerMenuIcon() {

WebElement drawerMenu = driver.findElement(By
.id("com.movocado.socialbostonsports:id/rel_drawer"));
try {
drawerMenu.click();
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}

}

问题:第二节课显示 NullPointerException。建议我一个解决方案。

最佳答案

您正在将 AndroidDriver 初始化到 LaunchApp 中,但没有将此驱动程序引用传递到 DrawerMenuTest 中,您仅使用 null 创建 AndroidDriver 的引用变量,这是导致 NullPointerException 的原因。

要克服这个问题,您应该创建单独的 singlton 类,该类将为每个类提供 AndroidDriver 的单个实例,如下所示:-

public class DriverInit {

private AndroidDriver<WebElement> driver;

private static DriverInit driverInit = null;

public static DriverInit getInstance() {
if (driverInit == null) {
driverInit = new DriverInit();
}
return driverInit;
}

private DriverInit() {
DesiredCapabilities capability = new DesiredCapabilities();

capability.setCapability("deviceName", "Android");
capability.setCapability("platformName", "Android");
capability.setCapability("platformVersion", "5.1.1");
capability.setCapability("deviceName", "Samsung Galaxy On5");
capability.setCapability("app", "D:\\whatsapp.apk");
capability.setCapability("PackageName", "com.movocado.socialbostonsports");
capability.setCapability("ActivityName", "com.movocado.socialbostonsports.Activity.LogInSceen");


this.driver = new AndroidDriver<WebElement>(new URL(
"http://127.0.0.1:4723/wd/hub"), capability);

this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}

public WebDriver getDriver() {
return this.driver;
}
}

现在您可以将其使用到 LaunchApp 类中,如下所示:-

public class LaunchApp {

AndroidDriver<WebElement> driver;

@BeforeTest
public void Test1() throws MalformedURLException {
driver = DriverInit.getInstance().getDriver();
//now do your stuff with this driver
}
}

并在 DrawerMenuTest 类中使用,如下所示:-

public class DrawerMenuTest {
AndroidDriver<WebElement> driver;

@Test(priority = 1)
public void DrawerMenuIcon() {
//get driver instance first
driver = DriverInit.getInstance().getDriver();

WebElement drawerMenu = driver.findElement(By
.id("com.movocado.socialbostonsports:id/rel_drawer"));
try {
drawerMenu.click();
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}

}
}

希望有帮助..:)

关于java - Appium:我有 2 个类,ClassA 和 ClassB。我正在使用 testng.xml 文件执行这 2 个类。我想知道 ClassB 的数据,我需要放置 @Beforeclass 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38611025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com