[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”