我正在使用Appium自动化Android应用程序,我有一个基础类与安装和拆除(在设置初始化appium会话和拆解销毁会话)。
这个基类我在所有testng类中继承,现在为每个测试类Appium生成新的会话。
所以我的问题是,一旦为任何一个类生成,我们如何在所有类中维护appium会话。
由于 萨迪克
答案 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);