[TOC]
## Appium 服务器初始化参数(Capability)
Desired capabilities是自动化脚本与Appium服务器建立会话时,发送给 Appium 服务器的键值对集合 (比如 map 或 hash),告诉服务器我们想要启动什么类型的自动化会话。<br>
例如,我们可以把 platformName capability 设置为 iOS,告诉 Appium 我们想要 iOS 会话,而不是 Android 或者 Windows 会话。我们也可以设置 safariAllowPopups capability 为 true ,确保我们在 Safari 自动化会话中可以使用 javascript 打开新窗口。
---
### 设置Capability
```python
desired_caps = {
'appPackage': 'com.example.android.contactmanager',
'appActivity': '.ContactManager',
'platformName': 'Android',
'platformVersion': '5.1.1',
'deviceName': 'Android Emulator',
'app': 'D://ContactManager.apk',
'unicodeKeyboard':True,
'resetKeyboard':True
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
```
---
### Capability参数项
| 键 | 描述 | 值 |
|---|---|---|
| automationName | 自动化测试的引擎 | Appium (默认)或者 Selendroid |
| **platformName** | 使用的手机操作系统 | iOS, Android, 或者 FirefoxOS |
| **platformVersion** | 手机操作系统的版本 | 例如 7.1, 4.4 |
| **deviceName** | 使用的手机或模拟器类型 | iPhone Simulator, Android Emulator, Galaxy S4, 等等 |
| **appPackage** | 运行的 Android 应用的包名 | com.example.android.myApp, com.android.settings |
| **appActivity** | Activity 的名字是指从你的包中所要启动的 Android acticity。他通常需要再前面添加`. ` | MainActivity, .Settings |
| **app** | 本地绝对路径_或_远程 http URL 所指向的一个安装包(.ipa,.apk,或 .zip 文件)。如果您指定了 appPackage 和 appActivity 参数(见下文),Android 则不需要此参数了。 | /abs/path/to/my.apk 或 http://myapp.com/app.ipa |
| unicodeKeyboard | 使用 Unicode 输入法。 默认值为 false ,**设置为true后才能输入中文** | true或false |
| resetKeyboard | 在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态,默认值为 false | true或false |
| noReset | 在当前 session 下不会重置应用的状态。默认值为 false,设置为true后,不需要每次运行用例都安装apk | true或false |
更多Capability,参考:[http://appium.io/docs/cn/writing-running-appium/caps/index.html](http://appium.io/docs/cn/writing-running-appium/caps/index.html)
---
## 获取appPackage与appActivity
方法一:推荐使用aapt工具,aapt是sdk自带的一个工具,在sdk\build-tools目录下
```cmd
E:\android_sdk\build-tools\25.0.1>aapt dump badging D:\ContactManager.apk
package: name='com.example.android.contactmanager' versionCode='1' versionName='1.0' platformBuildVersionName=''
sdkVersion:'5'
targetSdkVersion:'5'
...
launchable-activity: name='com.example.android.contactmanager.ContactManager' label='Contact Manager' icon=''
..
```
通过本实例,可得知
appPackage = com.example.android.contactmanager
appActivity = com.example.android.contactmanager.ContactManager
---
## 查看当前activity名称
打开APP进入到对应的窗口后,执行命令 `adb shell dumpsys window w |findstr \/ |findstr name=`
```cmd
E:\>adb shell dumpsys window w |findstr \/ |findstr name=
mSurface=Surface(name=com.example.android.contactmanager/com.example.android.contactmanager.ContactAdder)
```
通过上面结果得知,当前的activity名称为“com.example.android.contactmanager.ContactAdder”