Java 如何在多个testng类之间保留Appium会话

Java 如何在多个testng类之间保留Appium会话,java,appium,Java,Appium,我正在使用Appium自动化Android应用程序,我有一个带有安装和拆卸的基类(在安装初始化Appium会话和拆卸会话中) 我在所有testng类中继承了这个基类,现在为每个测试类生成了新的会话 所以我的问题是,一旦为任何类生成appium会话,我们如何在整个类中维护它 谢谢 Sadik您可以在不继承基类的情况下实现相同的功能 步骤1->初始化设置中的驱动程序对象,即设置方法为driver=newandroiddriver(url,caps) 步骤2->如果您有任何实用程序或常量类,请调用其构

我正在使用Appium自动化Android应用程序,我有一个带有安装和拆卸的基类(在安装初始化Appium会话和拆卸会话中)

我在所有testng类中继承了这个基类,现在为每个测试类生成了新的会话

所以我的问题是,一旦为任何类生成appium会话,我们如何在整个类中维护它

谢谢
Sadik

您可以在不继承基类的情况下实现相同的功能

步骤1->初始化设置中的驱动程序对象,即设置方法为
driver=newandroiddriver(url,caps)

步骤2->如果您有任何实用程序或常量类,请调用其构造函数并将驱动程序作为参数传递,例如
新常量(驱动程序)
注意:如果只需要一个驱动程序实例,可以将驱动程序标记为静态变量

步骤3->
无论何时您希望访问驱动程序,都可以将其作为Constant.driver访问或在类级别初始化驱动程序对象

我已经使用Singlton设计模式实现了这种方法,这里是一种方法:

public class SingltonFactory{

    private static SingltonFactory instance = new SingltonFactory();
    private static AppiumDriver<MobileElement> driver;

    private SingltonFactory() {
    }

    // Get the only object available
    public static SingltonFactory getInstance() {
        return instance;
    }

    // Get the only object available
    public void setDriver(AppiumDriver<MobileElement> driver1) {
        driver = driver1;
    }

    public AppiumDriver<MobileElement> getAppiumDriver() {
        return driver;
    }   
公共类SingltonFactory{
私有静态SingltonFactory实例=新建SingltonFactory();
专用静态AppiumDriver驱动程序;
私人SingltonFactory(){
}
//获取唯一可用的对象
公共静态SingltonFactory getInstance(){
返回实例;
}
//获取唯一可用的对象
公共无效设置驱动程序(APPIUMDRIVER1){
驾驶员=驾驶员1;
}
公共AppiumDriver getAppiumDriver(){
返回驱动器;
}   
}

在测试前案例中添加initialize SingltonFactory,并分配驱动程序对象,如下所示:

AppiumFactory appiumFactory = AppiumFactory.getInstance();
if(appiumFactory.getAppiumDriver() == null) {
    driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), cap);                
}
else{
   driver = appiumFactory.getAppiumDriver();
}
AppiumFactory AppiumFactory=AppiumFactory.getInstance();
if(appiumFactory.GetAPPIUMDRIVE()==null){
驱动程序=新的AndroidDriver(新的URL(“http://127.0.0.1:4723/wd/hub"(香港法例第六章),;
}
否则{
driver=appiumFactory.getAppiumDriver();
}

我也有同样的要求,这是一个Gradle项目,我使用Gradle脚本来执行我的测试用例, 要求:必须使用会话ID保留或检索Appium会话(驱动程序),这样我们就可以避免每次在测试用例之间重新初始化

环境: 多个测试用例(>50个场景)按顺序基于源标记运行。 Gradle脚本包含参数 android上的应用程序无需每次重新初始化

我尝试了什么:1。尝试将驱动程序信息写入文件,并在每次启动新方案时重试(在Appium中私有设置SessionID类)

创建Appium(本地)类,该类可以使用会话id+AppiumAPI,但这非常繁忙,最终会维护一些已经可用的东西

   DesiredCapabilities dc = new DesiredCapabilities();
    //migrate to gradle params later after demo
    dc.setCapability("deviceName", "XX30");
    dc.setCapability("udid", System.getProperty("hubUdid"));
    dc.setCapability("appPackage", "com.bbbbb.bbb.bbb.primary");
    dc.setCapability("appActivity", "..Activity");
    dc.setCapability("autoLaunch",false);
    dc.setCapability("dontStopAppOnReset",true);
    dc.setCapability("noReset", "true");
    driver_hub = Android.initialize(new URL("http://127.0.0.1:4723/wd/hub"), dc);

你能分享一些代码吗,我试过了,但它正在工作得到空指针异常