1、appium工作原理

  1. 启动appium server
  2. appium client 发送Desired Capabilities信息给appium server,appium server返回一个session id给client
  3. appium client发送指令给appium server,appium server把命令发送到移动设备上去执行
  4. 移动端设备将执行结果返回给appium server,appium server再返回给client

desired capabilities

desired capabilities是什么,它的作用是告诉appium server被测试apk相关的信息,移动设备相关的信息。直接上官网的解释,地址:

https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

Desired Capabilities are keys and values encoded in a JSON object, sent by Appium clients to the server when a new automation session is requested. They tell the Appium drivers all kinds of important things about how you want your test to work. Each Appium client builds capabilities in a way specific to the client's language, but at the end of the day, they are sent over to Appium as JSON objects.

2、准备工作

  • 启动安卓模拟器,并打开开发者模式
  • 启动appium server
PS C:\Users\StephenWang> appium -a 127.0.0.1 -p 4723
[Appium] Welcome to Appium v1.13.0
[Appium] Non-default server args:
[Appium] address: 127.0.0.1
[Appium] Appium REST http interface listener started on 127.0.0.1:4723
adb devices



如果设备未连接,尝试手动连接

#夜神模拟器连接命令
adb connect 127.0.0.1:62001 # 逍遥模拟器
adb connect 127.0.0.1:21503

3、第一个appium脚本

在模拟器上安装锤子日历并启动。

获取包名和启动的activity

aapt dump    badging  C:\appium\chuizirili_ppc.apk

package: name='com.smartisan.calendar' versionCode='20161127' versionName='1.7.2'
uses-permission:'android.permission.GET_ACCOUNTS'
uses-permission:'android.permission.MANAGE_ACCOUNTS'
uses-permission:'android.permission.INTERNET'
uses-permission:'android.permission.VIBRATE'
uses-permission:'android.permission.READ_CONTACTS'
uses-permission:'android.permission.READ_CALENDAR'
uses-permission:'android.permission.WRITE_CALENDAR'
uses-permission:'android.permission.WAKE_LOCK'
uses-permission:'android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission:'android.permission.USE_CREDENTIALS'
uses-permission:'android.permission.READ_SYNC_SETTINGS'
uses-permission:'com.google.android.googleapps.permission.GOOGLE_AUTH.mail'
uses-permission:'android.permission.AUTHENTICATE_ACCOUNTS'
uses-permission:'android.permission.ACCESS_COARSE_LOCATION'
uses-permission:'android.permission.ACCESS_FINE_LOCATION'
uses-permission:'android.permission.READ_SYNC_STATS'
uses-permission:'com.smartisan.permission.READ_ACCOUNT'
uses-permission:'android.permission.ACCESS_NETWORK_STATE'
uses-permission:'android.permission.READ_EXTERNAL_STORAGE'
uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'android.permission.READ_PROFILE'
uses-permission:'android.permission.CALL_PHONE'
uses-permission:'android.permission.READ_PHONE_STATE'
uses-permission:'android.permission.ACCESS_WIFI_STATE'
uses-permission:'android.permission.CHANGE_WIFI_STATE'
uses-permission:'android.permission.CHANGE_CONFIGURATION'
uses-permission:'android.permission.GET_TASKS'
uses-permission:'android.permission.MOUNT_UNMOUNT_FILESYSTEMS'
uses-permission:'android.permission.WRITE_CONTACTS'
uses-permission:'android.permission.READ_CALENDAR'
uses-permission:'android.permission.WRITE_SYNC_SETTINGS'
uses-permission:'android.permission.WRITE_SETTINGS'
sdkVersion:'14'
targetSdkVersion:'19'
application: label='Smartisan Calendar' icon='res/mipmap-xhdpi-v4/ic_launcher_calendar.png'
launchable activity name='com.android.calendar.AllInOneActivity'label='' icon=''
uses-feature:'android.hardware.location'
uses-feature:'android.hardware.location.gps'
uses-feature:'android.hardware.location.network'
uses-feature:'android.hardware.wifi'
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
other-activities
search
other-receivers
other-services
supports-screens: 'small' 'normal' 'large' 'xlarge'
supports-any-density: 'true'
locales: '--_--' 'ca' 'da' 'fa' 'ja' 'nb' 'be' 'de' 'af' 'bg' 'th' 'fi' 'hi' 'vi' 'sk' 'uk' 'el' 'nl' 'pl' 'sl' 'tl' 'am' 'in' 'ko' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'cs' 'es' 'ms' 'et' 'it' 'lt' 'pt' 'hu' 'ru' 'zu' 'lv' 'sv' 'iw' 'sw' 'fr_CA' 'lo_LA' 'en_GB' 'et_EE' 'ka_GE' 'km_KH' 'zh_HK' 'hy_AM' 'zh_CN' 'en_IN' 'mn_MN' 'es_US' 'pt_PT' 'zh_TW' 'ms_MY'
densities: '120' '160' '240' '320' '480'

从上面可知,package: name='com.smartisan.calendar' ,aunchable activity name='com.android.calendar.AllInOneActivity'

编写脚本

from time import sleep
#从appium中导入webdriver
from appium import webdriver desired_apability = {}
#平台名称:Android/IOS
desired_apability["platformName"] = "Android"
#系统版本
desired_apability["platformVersion"] ="4.4.2"
#设备名称
desired_apability["deviceName"] = "127.0.0.1:62001"
#是否重置会话
desired_apability["noReset"] = True
#启动的Activity
desired_apability["appActivity"] = "com.android.calendar.AllInOneActivity"
#包名
desired_apability["appPackage"] = "com.smartisan.calendar"
#apk的地址
desired_apability["app"] = r"C:\appium\chuizirili_ppc.apk" driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_apability) #睡眠5s
sleep(5)
print("Install %s and start sucess" %desired_apability["appPackage"])
driver.quit()

运行结果

运行脚本,打开模拟器观察效果,

appium入门篇之desired capabilities(2)的更多相关文章

  1. Java&Python&Appium 驱动APP及Desired Capabilities配置

    一.摘要 本篇博文,将阐述如何将环境&代码&APP联系起来工作 二.Java代码 我们先看一段真实的java代码,我将他放在了TestNG框架的@BeforeTest里,执行这段即可启 ...

  2. Appium Python 三:Desired capabilities

    简介 Desired capabilities 是一些键值对的集合.python里面就采用字典的方式. 客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试.比如,我们可以把 platformNa ...

  3. Appium基础四:Desired Capabilities详讲

    Desired Capabilities在启动session的时候是必须提供的,先看如下代码: Desired Capabilities本质上是key value的对象,他告诉appium serve ...

  4. Appium 工作原理及 Desired Capabilities

    一.Appium工作原理 脚本请求 --> 4723端口appium server --> 解析参数给PC端4724端口 --> 发送给设备4724端口 --> 通过设备472 ...

  5. Appium自动化(4) - Appium Desired Capabilities 参数详解

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html Desired Capabilit ...

  6. Appium入门(7)__Appium Desired Capabilities

    Desired Capabilities 是由多个键值对组成,代表移动设备相关信息.由Appium Client向Appium Server发送. 但无论Appium Client使用何种语言,最终是 ...

  7. Appium Desired Capabilities

    Appium Desired Capabilities Desired Capabilities 是由 keys 和 values 组成的 JSON 对象. 举个简单例子: { "platf ...

  8. appium简明教程(7)——Desired Capabilities详解

    Desired Capabilities在启动session的时候是必须提供的. Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情 ...

  9. 移动端自动化测试 -- appium 之Desired Capabilities与 定位控件

    一.Desired Capabilities Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilities 本质上是以 key va ...

随机推荐

  1. Windows Container 和 Docker

    Windows Container 和 Docker 微软在2016年的Ignite技术大会上正式发布了Windows Server 2016,其中的容器服务已经可以作为生产环境使用.这意味着Wind ...

  2. Net多线程编程

    Net多线程编程—使用Visual Studio 2012进行调试 1 相关概念 1)栈帧 C语言中,每个栈帧对应着一个未运行完的函数.栈帧中保存了该函数的返回地址和局部变量. 栈帧也叫过程活动记录, ...

  3. quartz2.x源码分析——启动过程

    title: quartz2.x源码分析--启动过程 date: 2017-04-13 14:59:01 categories: quartz tags: [quartz, 源码分析] --- 先简单 ...

  4. Etag & If-None-Match 专题

    一.概述 缓存通俗点讲,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛) ...

  5. Neo4j集群环境建设

    简介: Neo4j它是目前的主流地图数据库.它本身提供了高可用性集群解决方案.本文将试图建立一个高可用性neo4j周围环境. 1. 这是一个地图数据库? 图形库(graphic database)问题 ...

  6. Windows下Apache+MySQL+PHP快速配置的几种方法

    Apache MySQL PHP Windows WAMP 1.易思EasySiteServer服务器集成环境 v1.0  (推荐) 尔创互联为推广其ESPCMS而开发的一个小东东,很好用.零配置,完 ...

  7. Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)

    为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...

  8. Android Fragment——详细解释

    1.Fragment概述 在一个Activity中. Fragment代表UI的一个部分或者一个行为.一个Activity能够结合多个Fragment对象,也能够在多个activity中使用同样Fra ...

  9. 通通WPF随笔(4)——通通手写输入法(基于Tablet pc实现)

    原文:通通WPF随笔(4)--通通手写输入法(基于Tablet pc实现) 从我在博客园写第一篇博客到现在已经有1年半了,我的第一篇博客写的就是手写识别,当时,客户需求在应用中加入手写输入功能,由于第 ...

  10. MyBatis 问题 & 解决

    # 问题 Invalid bound statement (not found) # 解决 <mappers> 标签的包括的是 SQL 语句存在的地方,此外 <mapper> ...