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=30

fullReset=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{
    static   Configuration appset= PropertiesUtil.getCommonsPropertis("android.properties");
    //appium server地址
    public static String serverURL=appset.getString("serverURL");

    //测试引擎名字
    public  static 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 int  deviceReadyTimeout=Integer.valueOf(appset.getString("deviceReadyTimeout"));

    public static int   newCommandTimeout=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参数大全,可参见

https://blog.csdn.net/ljl6158999/article/details/80594521

原文地址:https://www.cnblogs.com/nullnullnull/p/11663651.html

时间: 2024-10-04 06:38:23

Appium - DesiredCapabilities对象的参数配置及含义的相关文章

LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义

LVS(Linux  Virtual Server)Linux服务器集群系统 针对高可伸缩,高可用服务的需求,给予IP层和内容请求分发的负载均衡调度解决方法,并在Linux的内核中实现,将一组服务器构成一个实现可伸缩,高可用网络服务的虚拟服务器 负载均衡1.大量的兵法访问或数据流量分担到多态节点设备分别处理,减少用户的等待时间2.单个重负载的运算分担到多态节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户 负载调度器一组服务器通过高速的局域网或者地理分布的广域网相互相连,在他们

Android版DesiredCapabilities参数配置

前言 每一个App测试都应指定是在什么平台下,那个设备中运行那个App,而在Appium中主要是通过DesiredCapabilities来配置的. DesiredCapabilities的作用,负责启动服务时的参数配置:DesiredCapabilities的本质是key/value的对象. DesiredCapabilities参数配置 其实,DesiredCapabilities的参数有很多,其他的可以看大神们的介绍:暂时就用到这几个参数: platformName 运行平台,Androi

Yarn&amp;Mapreduce参数的具体含义和配置参考

Yarn & Mapreduce 参数的具体含义和配置 http://zh.hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp-2-0/

HttpClient 4.3连接池参数配置及源码解读

目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB->服务端处理请求,查询数据并返回),发现原本的HttpClient连接池中的一些参数配置可能存在问题,如defaultMaxPerRoute.一些timeout时间的设置等,虽不能确定是由于此连接池导致接口查询慢,但确实存在可优化的地方,故花时间做一些研究.本文主要涉及HttpClient连接池.请求的参数

Oracle 统计量NO_INVALIDATE参数配置(上)

转载:http://blog.itpub.net/17203031/viewspace-1067312/ Oracle统计量对于CBO执行是至关重要的.RBO是建立在数据结构的基础上的,DDL结构.约束会将SQL语句分为不同的成本结构等级.而CBO是在数据结构的基础上,加入数据表细粒度信息,将成本结构细化为成本cost值. 相对于数据表的DDL结构,统计量反映了当下数据表数据分布情况,可变性更强.我们经常遇到这样的场景,数据导入操作之后,原有一个运行良好的作业突然效率低下.当我们手工收集一下统计

Appium环境的安装与配置,Python测试脚本测试

Appium自动化测试系列1 - Appium环境的安装与配置 发表于4个月前(2015-01-27 14:34)   阅读(803) | 评论(0) 0人收藏此文章, 我要收藏 赞0 寻找 会’偷懒’的开发者线下公开课,报名即享受免费体验云主机 摘要 看了网上很多有关Appium的安装配置贴,都写得语焉不详,不清不楚,正好打算把自动化测试框架从Robotium切换到Appium, 顺手记录一下,给大家参考.转载请注明出处. Appium 安装 配置 测试 之前一直使用Robotium做为And

JVM虚拟机(三):参数配置

在虚拟机运行的过程中,如果可以跟踪系统的运行状态,那么对于问题的故障排查会有一定的帮助,为此,虚拟机提供了一些跟踪系统状态的参数,使用给顶的参数执行java虚拟机,就可以在系统运行时打印相关日志,用于分析实际问题.我们进行迅疾参数配置,其实主要是围绕着堆.栈.方法区进行配置. 堆分配参数 -XX:+PrintGC使用这个参数,虚拟机启动后,只要遇到GC就会打印日志. -XX:+UserSerialGC 配置串行回收器 -XX:+PrintGCDetails可以查看详细信息,包括各个区的情况 -X

JVM参数配置&amp;&amp;命令工具

JVM参数配置 大致方向:JVM调优的目的是保证在一定吞吐量的情况下尽可能的减少GC次数,从而减少系统停顿时间,提高服务质量和效率. 其中减少GC次数的原则: 将新生代转换成老年代的数量降至最少(及时进行Minor GC回收新生代) 减少Full GC 次数 常用参数 -XX:+PrintGCDetails:打印GC的详细信息(冒号之后的+表示打印,-表示不打印) -XX:+UseSerialGC : 使用串行回收器 -Xmx4000m :指定堆最大值为4000M( 等价于-XX:MaxHeap

教你如何利用分布式的思想处理集群的参数配置信息——spring的configurer妙用

引言 最近LZ的技术博文数量直线下降,实在是非常抱歉,之前LZ曾信誓旦旦的说一定要把<深入理解计算机系统>写完,现在看来,LZ似乎是在打自己脸了.尽管LZ内心一直没放弃,但从现状来看,需要等LZ的PM做的比较稳定,时间慢慢空闲出来的时候才有机会看了.短时间内,还是要以解决实际问题为主,而不是增加自己其它方面的实力. 因此,本着解决实际问题的目的,LZ就研究出一种解决当下问题的方案,可能文章的标题看起来挺牛B的,其实LZ就是简单的利用了一下分布式的思想,以及spring框架的特性,解决了当下的参