Appium - DesiredCapabilities对象的参数配置及含义

别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述Appium - DesiredCapabilities对象的参数配置及含义相关的知识,希望能为你提供帮助。
Desired Capabilities
Desired Capabilities携带了一些配置信息。从本质上讲,它是key-value形式的对象。可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象。
Desired Capabilities最重要的作用是告诉appium server本次测试的上下文。
比如:
本次测试是启动浏览器还是启动移动设备?
是启动andorid还是启动ios?
启动android时,app的package是什么?
启动android时,app的activity是什么?
....
appium server的这些疑问Desired Capabilities都必须给予解答,否则appium server就无法完成移动app或者是浏览器的启动。
Appium 的 Desired Capabilities 基本配置步骤如下:
1、新增android.properties文件

#< !--server地址 --> serverURL=http://127.0.0.1:4723/wd/hub#< !--automationName为selendroid or appium,如果sdk版本> =17请使用appium;如果sdk版本< =17请使用selendroid --> automationName=Appium#< !-- 测试平台 iOS和Android --> platformName=Android#< !-- 平台版本 --> platformVersion=5.0.2#< !-- 设备名字,可随意起名字,但是要有意义 --> deviceName=APD-CMS-AutoTest#< !-- android app路径 --> androidAppPath=res/app/android/android-debug.apk iosAppPath=XXXX#< !--使用appium的输入法,支持中文并隐藏键盘--> unicodeKeyboard=true#< !-- 重置键盘输入法 --> resetKeyboard=true#< !--不重签名app--> noSign=true#< !--设置driver超时时间,单位s--> newCommandTimeout=600#< !--appWaitActivity,这个参数的值写的是app启动后真正的界面activity--> appWaitActivity=com.cccis.cms.release.r1.MainActivity#< !--app的包 --> appPackage=com.cccis.cms.release.r1#< !--app的 activity --> appActivity=com.cccis.cms.release.r1.MainActivity#< !--deviceReadyTimeout修改appium判断设备正常响应的超时时间,默认是5秒--> deviceReadyTimeout=30fullReset=true #< !--设备UDID iPhone真机使用或者android并行测试可以使用 --> udid=78e99c1c#< !-- 设置为true之后会覆盖当前session --> sessionOverride=true#< !-- 页面元素15秒不出现超时时间 --> elementTimeOut=15

2、新增DriverConfig java文件,获取properties文件中各参数的值
package com.cccis.cms.base; import com.cccis.cms.utils.PropertiesUtil; import org.apache.commons.configuration.Configuration; public class DriverConfig{ staticConfiguration appset= PropertiesUtil.getCommonsPropertis("android.properties"); //appium server地址 public static String serverURL=appset.getString("serverURL"); //测试引擎名字 publicstatic String automationName=appset.getString("automationName"); //测试平台名字 public static String platformName=appset.getString("platformName"); //测试平台版本号 public static String platformVersion=appset.getString("platformVersion"); //设备名字 public static String deviceName=appset.getString("deviceName"); //ios app的路径 public static String iosAppPath=appset.getString("iosAppPath"); //android app路径 public static String androidAppPath=appset.getString("androidAppPath"); //android app的 package public static String appPackage=appset.getString("appPackage"); //android app的activity public static String appActivity=appset.getString("appActivity"); public static String appWaitActivity=appset.getString("appWaitActivity"); //安卓独有 - 是否使用unicode键盘,使用此键盘可以输入中文字符 public static boolean unicodeKeyboard= Boolean.parseBoolean(appset.getString("unicodeKeyboard")); //android独有 - 是否重置键盘,如果设置了unicodeKeyboard键盘,可以将此参数设置为true,然后键盘会重置为系统默认的 public static boolean resetKeyboard=Boolean.parseBoolean(appset.getString("resetKeyboard")); //是否覆盖已有的seesssion,这个用于多用例执行,如果不设置的话,会提示前一个session还没有结束,用例就不能继续执行了 public static boolean sessionOverride=Boolean.parseBoolean(appset.getString("sessionOverride")); //设备udid public static String udid=appset.getString("udid"); //元素等待超时时间 public static int elementTimeOut= Integer.valueOf(appset.getString("elementTimeOut")); public static boolean fullReset=Boolean.parseBoolean(appset.getString("fullReset")); public static intdeviceReadyTimeout=Integer.valueOf(appset.getString("deviceReadyTimeout")); public static intnewCommandTimeout=Integer.valueOf(appset.getString("newCommandTimeout")); public static boolean noSign=Boolean.parseBoolean(appset.getString("noSign")); }

3、新增InitDriver类,初始化DesiredCapabilities对象
package com.cccis.cms.base; import com.cccis.cms.utils.AppiumUtil; import io.appium.java_client.AppiumDriver; import io.appium.java_client.remote.AndroidMobileCapabilityType; import io.appium.java_client.remote.MobileCapabilityType; import java.io.File; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.Assert; import org.testng.ITestContext; import org.testng.annotations.Test; public class InitDriver {//声明driver public static AppiumDriver< WebElement> driver; //声明ITestContext,用于获取testng配置文件内容 public static ITestContext testContext; //声明DesiredCapabilities public static DesiredCapabilities capabilities=new DesiredCapabilities(); //实例化本类的日志输出对象 public static Logger logger = Logger.getLogger(InitDriver.class); public static AppiumDriver< WebElement> selectDriver(String platformName,AppiumUtil appiumUtil){capabilities = new DesiredCapabilities(); //设置capability,以便和appium创建session capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, DriverConfig.platformName); capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, DriverConfig.platformVersion); capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, DriverConfig.deviceName); capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, DriverConfig.automationName); capabilities.setCapability("sessionOverride", DriverConfig.sessionOverride); //如果测试平台是android的话,执行下面这个if语句内容 if(platformName.equalsIgnoreCase("android")){ /** * 设置和android测试相关的capability并实例化driver对象 * */ capabilities.setCapability(MobileCapabilityType.APP, new File(DriverConfig.androidAppPath).getAbsolutePath()); capabilities.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, DriverConfig.unicodeKeyboard); capabilities.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, DriverConfig.resetKeyboard); capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, DriverConfig.appPackage); capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, DriverConfig.appActivity); driver = appiumUtil.getDriver(DriverConfig.serverURL, capabilities,platformName); logger.info(platformName+"已经启动"); driver.manage().timeouts().implicitlyWait(DriverConfig.elementTimeOut, TimeUnit.SECONDS); return driver; //如果测试平台是ios的话,执行下面这个if语句内容 }else if(platformName.equalsIgnoreCase("ios")){ /** * 设置和ios测试相关的capability并实例化driver对象 * */ capabilities.setCapability(MobileCapabilityType.APP, new File(DriverConfig.iosAppPath).getAbsolutePath()); //ios设置自动接收系统alert,注意IOS弹出的alert,APPIUM可以自动处理掉,支持ios8以上系统 capabilities.setCapability("autoAcceptAlerts", true); driver = appiumUtil.getDriver(DriverConfig.serverURL, capabilities,platformName); logger.info(platformName+"已经启动"); driver.manage().timeouts().implicitlyWait(DriverConfig.elementTimeOut,TimeUnit.SECONDS); }else{ logger.error("初始化driver失败"); Assert.fail("初始化driver失败"); }//最后返回dirver对象 return driver; }@Test public static void test() { AppiumUtil appiumUtil = new AppiumUtil(); String platformName = DriverConfig.platformName; InitDriver.selectDriver(platformName,appiumUtil); }}

DesiredCapabilities参数大全,可参见
【Appium - DesiredCapabilities对象的参数配置及含义】https://blog.csdn.net/ljl6158999/article/details/80594521

    推荐阅读