天天看點

Appium Desired Capabilities

簡介

Appium Desired Capabilities官方文檔:http://appium.io/docs/en/writing-running-appium/caps/

或者在gitHub上檢視:https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/caps.md

Desired Capabilities是一組設定的鍵值對的集合,是對Appium會話進行配置,傳達給伺服器所需自動化的平台和應用程式,通知Appium Server建立所需要的Session資訊

例:

{
    "platformName": "iOS",
    "platformVersion": "11.0",
    "deviceName": "iPhone 7",
    "automationName": "XCUITest",
    "app": "/path/to/my.app"}      

  這組設定就是表明運作平台IOS系統,平台版本11.0,裝置名稱iPhone7,使用ios的XCITest驅動運作程式/path/to/my.app

appium-desktop 中設定

  點選【start server v xxx】啟動appium-desktop後點選右上角放大鏡圖示。

   

Appium Desired Capabilities

 

  進入設定Desired Capabilities。配置Appium session,設定Capabilities,如下圖,啟動會話對app進行操作

  

Appium Desired Capabilities

腳本中進行設定

  如下腳本:  

from appium import webdriver

caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "32"
caps["appPackage"] = "com.tencent.qqlite"
caps["appActivity"] = "com.tencent.mobileqq.activity.RegisterGuideActivity"

driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

el1 = driver.find_element_by_id("com.tencent.qqlite:id/btn_login")
el1.click()
el2 = driver.find_element_by_accessibility_id("請輸入QQ号碼或手機或郵箱")
el2.send_keys("xxxxxxxxxx")
el3 = driver.find_element_by_accessibility_id("請輸入密碼")
el3.send_keys("xxxxxxxxxxx")
el4 = driver.find_element_by_accessibility_id("登入QQ")
el4.click()

driver.quit()      

Capability 參數

  以下設定來源于gitHub:https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/caps.md

            Appium 伺服器初始化參數(Capability)

  公有

  <expand_table>

描述

automationName

自動化測試的引擎

Appium

 (預設)或者 

Selendroid

platformName

使用的手機作業系統

iOS

Android

, 或者 

FirefoxOS

platformVersion

手機作業系統的版本 例如 

7.1

4.4

deviceName

使用的手機或模拟器類型

iPhone Simulator

iPad Simulator

iPhone Retina 4-inch

Android Emulator

Galaxy S4

, 等等.... 在 iOS 上,使用 Instruments 的 

instruments -s devices

 指令可傳回一個有效的裝置的清單。在 Andorid 上雖然這個參數目前已被忽略,但仍然需要添加上該參數

app

本地絕對路徑_或_遠端 http URL 所指向的一個安裝包(

.ipa

,

.apk

,或 

.zip

 檔案)。Appium 将其安裝到合适的裝置上。請注意,如果您指定了 

appPackage

 和 

appActivity

 參數(見下文),Android 則不需要此參數了。該參數也與 

browserName

 不相容。

/abs/path/to/my.apk

 或 

http://myapp.com/app.ipa

browserName

做自動化時使用的浏覽器名字。如果是一個應用則隻需填寫個空的字元串 'Safari' 對應 iOS,'Chrome', 'Chromium', 或 'Browser' 則對應 Android

newCommandTimeout

用于用戶端在退出或者結束 session 之前,Appium 等待用戶端發送一條新指令所花費的時間(秒為機關)

60

language

(Sim/Emu-only) 為模拟器設定語言

fr

locale

(Sim/Emu-only) 為模拟器設定所在區域

fr_CA

udid

連接配接真機的唯一裝置号

1ae203187fc012g

orientation

(Sim/Emu-only) 模拟器目前的方向

豎屏

橫屏

autoWebview

直接轉換到 Webview 上下文(context)。預設值為 

false

true

false

noReset

在目前 session 下不會重置應用的狀态。預設值為 

false

true

false

fullReset

(iOS)删除所有的模拟器檔案夾。(Android) 要清除 app 裡的資料,請将應用解除安裝才能達到重置應用的效果。在 Android, 在 session 完成之後也會将應用解除安裝掉。預設值為 

false

true

false

  Android 獨有

appActivity

Activity 的名字是指從你的包中所要啟動的 Android acticity。他通常需要再前面添加

.

 (例如 使用 

.MainActivity

 代替 

MainActivity

MainActivity

.Settings

appPackage

運作的 Android 應用的包名

com.example.android.myApp

com.android.settings

appWaitActivity

用于等待啟動的 Android Activity 名稱

SplashActivity

appWaitPackage

用于等待啟動的 Android 應用的包

com.example.android.myApp

com.android.settings

appWaitDuration

用于等待 appWaitActivity 啟動的逾時時間(以毫秒為機關)(預設值為 

20000

)

30000

deviceReadyTimeout

用于等待模拟器或真機準備就緒的逾時時間

5

androidCoverage

用于執行測試的 instrumentation 類。 傳送 

-w

 參數到如下指令 

adb shell am instrument -e coverage true -w

com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation

enablePerformanceLogging

(僅适用于 Chrome 與 webview)開啟 Chromedriver 的性能日志。(預設值為 

false

true

false

androidDeviceReadyTimeout

用于等待裝置在啟動應用後準備就緒的逾時時間。以秒為機關。

30

androidInstallTimeout

用于等待在裝置中安裝 apk 所花費的時間(以毫秒為機關)。預設值為 

90000

90000

adbPort

用來連接配接 ADB 伺服器的端口(預設值為 

5037

5037

androidDeviceSocket

開發工具的 socket 名稱。隻有在被測應用是一個使用 Chromium 核心的浏覽器時才需要。socket 會被浏覽器打開,然後 Chromedriver 把它作為開發者工具來進行連接配接。

chrome_devtools_remote

avd

被啟動 avd 的名字

api19

avdLaunchTimeout

用于等待 avd 啟動并連接配接 ADB 的逾時時間(以毫秒為機關),預設值為 

120000

300000

avdReadyTimeout

用于等待 avd 完成啟動動畫的逾時時間(以毫秒為機關),預設值為 

120000

300000

avdArgs

啟動 avd 時使用的額外參數

-netfast

useKeystore

使用自定義的 keystore 給 apk 簽名,預設值為 

false

true

false

keystorePath

自定義 keystore 的路徑, 預設路徑為 ~/.android/debug.keystore

/path/to.keystore

keystorePassword

自定義 keystore 的密碼

foo

keyAlias

key 的别名

androiddebugkey

keyPassword

key 的密碼

foo

chromedriverExecutable

webdriver 可執行檔案的絕對路徑(如果 Chromium 内嵌一個自己提供的 webdriver,則應使用他去替換掉 Appium 自帶的 chromedriver)

/abs/path/to/webdriver

autoWebviewTimeout

用于等待 Webview 上下文(context)激活的時間(以毫秒為機關)。預設值為 

2000

4

intentAction

用于啟動 activity 的 intent action(預設值為 

android.intent.action.MAIN

android.intent.action.MAIN

android.intent.action.VIEW

intentCategory

用于啟動 activity 的 intent category。(預設值為 

android.intent.category.LAUNCHER

android.intent.category.LAUNCHER

android.intent.category.APP_CONTACTS

intentFlags

用于啟動 activity 的辨別(flags)(預設值為 

0x10200000

0x10200000

optionalIntentArguments

用于啟動 activity 的額外 intent 參數。請檢視 Intent 參數

--esn <EXTRA_KEY>

--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>

, 等等。

dontStopAppOnReset

在使用 adb 啟動應用之前,不要終止被測應用的程序。如果被測應用是被其他鈎子(anchor)應用所建立的,設定該參數為 false 後,就允許鈎子(anchor)應用的程序在使用 adb 啟動被測應用期間仍然存在。換而言之,設定 

dontStopAppOnReset

 為 

true

 後,我們在 

adb shell am start

 的調用中不需要包含 

-S

辨別(flag)。忽略該 capability 或 設定為 

false

 的話,就需要包含 

-S

 辨別(flag)。預設值為 

false

true

false

unicodeKeyboard

使用 Unicode 輸入法。 預設值為 

false

true

false

resetKeyboard

在設定了 

unicodeKeyboard

 關鍵字的 Unicode 測試結束後,重置輸入法到原有狀态。如果單獨使用,将會被忽略。預設值為 

false

true

false

noSign

跳過檢查和對應用進行 debug 簽名的步驟。僅适用于 UiAutomator,不适用于 selendroid。 預設值為 

false

true

false

ignoreUnimportantViews

調用 uiautomator 的函數 

setCompressedLayoutHierarchy()

。由于 Accessibility 指令在忽略部分元素的情況下執行速度會加快,這個關鍵字能加快測試執行的速度。被忽略的元素将不能夠被找到,是以這個關鍵字同時也被實作成可以随時改變的 設定 ( settings )。 預設值為 

false

true

false

disableAndroidWatchers

禁用 android 螢幕(watchers)。螢幕用于見識應用程式的無響應狀态(anr)和崩潰(crash),禁用會降低 Android 裝置或模拟器的 CPU 使用率。該 capability 僅在使用 UiAutomator 時有效,不适用于 selendroid,預設設定為 

false

true

false

chromeOptions

允許對 ChromeDriver 傳 chromeOptions 的參數。了解更多資訊請查閱 chromeOptions

chromeOptions: {args: ['--disable-popup-blocking']}

recreateChromeDriverSessions

當移除非 ChromeDriver webview時,終止掉 ChromeDriver 的 session。預設設定為 

false

true

false

nativeWebScreenshot

在 web 的上下文(context),使用原生(native)的方法去截圖,而不是用過代理的 ChromeDriver。預設值為 

false

true

false

androidScreenshotPath

在裝置中截圖被儲存的目錄名。預設值為 

/data/local/tmp

/sdcard/screenshots/

autoGrantPermissions

讓Appium自動确定您的應用需要哪些權限,并在安裝時将其授予應用。預設設定為 

false

true

false

  iOS 獨有

calendarFormat

(僅支援模拟器) 為iOS的模拟器設定月曆格式

gregorian

bundleId

被測應用的 bundle ID 。用于在真實裝置中啟動測試,也用于使用其他需要 bundle ID 的關鍵字啟動測試。在使用 bundle ID 在真實裝置上執行測試時,你可以不提供 

app

 關鍵字,但你必須提供 

udid

 。

io.appium.TestApp

udid

連接配接的真實裝置的唯一裝置編号 (Unique device identifier)

1ae203187fc012g

launchTimeout

以毫秒為機關,在 Appium 運作失敗之前設定一個等待 instruments 的時間

20000

locationServicesEnabled

(僅支援模拟器)強制打開或關閉定位服務。預設值是保持目前模拟器的設定.

true

false

locationServicesAuthorized

(僅支援模拟器)通過修改 plist 檔案設定是否允許應用使用定位服務,進而避免定位服務的警告出現。預設值是保持目前模拟器的設定。請注意在使用這個關鍵字時,你同時需要使用 

bundleId

 關鍵字來發送你的應用的 bundle ID。

true

false

autoAcceptAlerts

當警告彈出的時候,都會自動去點接受。包括隐私通路權限的警告(例如 定位,聯系人,照片)。預設值為 false。不支援基于 

XCUITest

 的測試。

true

false

autoDismissAlerts

當警告彈出的時候,都會自動去點取消。包括隐私通路權限的警告(例如 定位,聯系人,照片)。預設值為 false。不支援基于 

XCUITest

true

false

nativeInstrumentsLib

使用原生 intruments 庫(即關閉 instruments-without-delay)。

true

false

nativeWebTap

(僅支援模拟器)在Safari中允許“真實的",非基于 javascript 的 web 點選 (tap) 。 預設值:

false

。注意:取決于 viewport 大小/比例, 點選操作不一定能精确地點中對應的元素。

true

false

safariInitialUrl

(僅支援模拟器) (>= 8.1) 初始化 safari 的時使用的位址。預設是一個本地的歡迎頁面

https://www.github.com

safariAllowPopups

(僅支援模拟器)允許 javascript 在 Safari 中建立新視窗。預設保持模拟器目前設定。

true

false

safariIgnoreFraudWarning

(僅支援模拟器)阻止 Safari 顯示此網站可能存在風險的警告。預設保持浏覽器目前設定。

true

false

safariOpenLinksInBackground

(僅支援模拟器)Safari 是否允許連結在新視窗打開。預設保持浏覽器目前設定。

true

false

keepKeyChains

(僅支援模拟器)當 Appium 會話開始/結束時是否保留存放密碼存放記錄 (keychains) 庫(Library)/鑰匙串(Keychains))

true

false

localizableStringsDir

從哪裡查找本地化字元串。預設值為 

en.lproj

en.lproj

processArguments

通過 instruments 傳遞到 AUT 的參數

-myflag

interKeyDelay

以毫秒為機關,按下每一個按鍵之間的延遲時間

100

showIOSLog

是否在 Appium 的日志中顯示裝置的日志。預設值為 

false

true

false

sendKeyStrategy

輸入文字到文字框的政策。模拟器預設值:

oneByOne

(一個接着一個)。真實裝置預設值:

grouped

 (分組輸入)

oneByOne

grouped

setValue

screenshotWaitTimeout

以秒為機關,生成螢幕截圖的最長等待時間。預設值為:10

5

waitForAppScript

用于判斷 "應用是否被啟動” 的 iOS 自動化腳本代碼。預設情況下系統等待直到頁面内容非空。結果必須是布爾類型。

true;

target.elements().length > 0;

$.delay(5000); true;

webviewConnectRetries

用于擷取 webview 失敗時,發送連接配接資訊到遠端調試器的次數。預設次數為: 

8

12

appName

被測應用的名字。 用于支援 iOS 9 以上系統的應用的自動化。

UICatalog

customSSLCert

(Sim/Emu-only) 給模拟器添加一個 SSL 證書。 例如

-----BEGIN CERTIFICATE-----MIIFWjCCBEKg...

-----END CERTIFICATE-----

  使用 XCUITest(iOS 獨有)

processArguments

将會傳送到 WebDriverAgent 的程序參數與環境

{ args: ["a", "b", "c"] , env: { "a": "b", "c": "d" } }

'{"args": ["a", "b", "c"], "env": { "a": "b", "c": "d" }}'

wdaLocalPort

如果這個值被指定了,Mac 主機就會使用這個端口,通過 USB 發送資料到 iOS 裝置中。預設的端口與 iOS 裝置中 WDA 的端口号是一緻的。

8100

showXcodeLog

是否顯示運作測試時 Xcode 的輸出日志,如果值設定為 

true

 ,則會在啟動的時候産生大量的額外日志。預設設定為 

false

true

iosInstallPause

安裝應用程式與啟動 WebDriverAgent 之間停止的間隔時間(以毫秒為機關),特别适用于體積較大的包。預設是設定為 

8000

xcodeConfigFile

一個可選的 Xcode 可配置檔案的完整路徑,用于指定在真機上運作 WebDriverAgent 的個人身份或者團隊身份的代碼簽名。

/path/to/myconfig.xcconfig

keychainPath

從系統的 keychain 中導出私有開發秘鑰的完整路徑。在真機測試時與 

keychainPassword

 配合使用。

/path/to/MyPrivateKey.p12

keychainPassword

在 

keychainPath

 中指定 keychain 的解鎖密碼。

super awesome password

scaleFactor

模拟器縮放因子。這對于預設分辨率是大于實際分辨的模拟器來說非常有用。是以,你不用上下滑動模拟器的螢幕就能看到所有模拟器顯示的内容了。 可接受的值為: 

'1.0', '0.75', '0.5', '0.33' 和 '0.25'

。 這些值都應該是一個字元串

preventWDAAttachments

設定 WebDriverAgent 項目中的 DerivedData 檔案夾的權限為

僅可讀

。為了防止 XCTest 架構産生大量無用的截屏與日志,該設定是非常必要的,因為這是不可能通過 Apple 提供的接口去關閉的。
設定 capabilitity 為 

true

 将會設定 Posix 的檔案夾的權限為 

555

,設定為 

false

 則會将權限重置回 

755

webDriverAgentUrl

若提供了 URL,Appium 将在這 URL 上連接配接現有的 WebDriverAgent 執行個體,而不是重新啟動一個。

http://localhost:8100

useNewWDA

若設定為 

true

,則直接解除安裝裝置上現存的所有 WebDriverAgent 用戶端。在某些情況,該做法可以提高穩定性。預設設定為 

false

true

wdaLaunchTimeout

等待 WebDriverAgent 可 ping 同的時間(以毫秒為機關)。預設設定為 60000ms。

30000

calendarAccessAuthorized

true

,則允許在 iOS 模拟器上通路月曆。若設定為 

false

,則不被允許。否則,月曆的 authorizationStatus 會保持不變。
-

  You.i 引擎獨有

youiEngineAppAddress 正在運作的應用的裝置的 IP 位址。使用 

localhost

 作為模拟位址。使用 

localhost

 作為模拟器位址。使用裝置的 IP 位址作為真機的 IP。

localhost

192.168.1.203

  WinAppDriver 獨有

platformName

運作測試時所在的平台

Windows

deviceName

運作測試時所使用裝置的名字

WindowsPC

app

被測 windows 應用的 appID 或被測的 .exe 檔案的路徑。 查閱該文檔可了解更多查找 appID 的詳細方法。

c24c8163-548e-4b84-a466-530178fc0580_scyf5npe3hv32!App