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

时间:2016-01-12 12:03:53

标签: java appium

我正在使用Appium自动化Android应用程序,我有一个基础类与安装和拆除(在设置初始化appium会话和拆解销毁会话)。

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

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

由于 萨迪克

3 个答案:

答案 0 :(得分:1)

我已经使用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并分配驱动程序对象,如下所示:

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();
}

答案 1 :(得分:0)

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

步骤1 - &gt;在您的设置中初始化驱动程序对象,即设置方法为driver=new AndroidDriver(url,caps);

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

步骤3-&gt; 每当您希望访问驱动程序时,请将其作为Constant.driver访问或在类级别初始化驱动程序对象。

答案 2 :(得分:0)

我也有相同的要求,它是一个 Gradle 项目,并且我使用gradle脚本执行我的测试用例, 要求:必须使用会话ID保留或必须检索一个Appium会话(驱动程序),以便我们避免每次在测试用例之间

时进行重新初始化

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

我尝试做什么::1.尝试将驱动程序信息写入文件,并在每次启动新方案(Appium中私有的setSessionID类)时进行检索

创建可以使用会话ID + Appium API 的Appium(local)类,但是该类很忙,最终将维护已有的可用

   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);