Appium-Server與Appium-Desktop的區別

Appium-Server的配置,在以前的博文已有介紹,基於Python的Appium環境搭建合集,因此在此處就不詳細介紹了。今天主要來分享下Appium-Server和Appium desktop在使用上的區別。javascript

在這篇博文中分享瞭如何使用模擬器,Genymotion模擬器的安裝及腳本製做,但還沒分享如何使代碼正常運行起來,接下來詳細說明。html

在談起代碼時,就須要先了解下appium的關鍵字java

Appium 服務關鍵字

關鍵字 描述 實例
automationName 你想使用的自動化測試引擎 Appium (默認) 或 Selendroid
platformName 你要測試的手機操做系統 iOSAndroid, 或 FirefoxOS
platformVersion 手機操做系統版本 例如: 7.14.4
deviceName 使用的手機類型或模擬器類型 iPhone SimulatoriPad SimulatoriPhone Retina 4-inchAndroid EmulatorGalaxy S4, 等。在 iOS 上,這個關鍵字的值必須是使用 instruments -s devices 獲得的可以使用的設備名稱之一。在 Android 上,這個關鍵字目前不起做用。
app .ipa or .apk文件所在的本地絕對路徑或者遠程路徑,也能夠是一個包括二者之一的.zip。 Appium會先嚐試安裝路徑對應的應用在適當的真機或模擬器上。針對Android系統,若是你指定app-packageapp-activity(具體見下面)的話,那麼就能夠不指定app。 會與 browserName 衝突 好比/abs/path/to/my.apkhttp://myapp.com/app.ipa
browserName 須要進行自動化測試的手機 web 瀏覽器名稱。若是是對應用進行自動化測試,這個關鍵字的值應爲空。 iOS 系統上能夠用 'Safari' ,Android 系統上能夠用 'Chrome', 'Chromium', 或 'Browser'。
newCommandTimeout 設置命令超時時間,單位:秒。達到超時時間仍未接收到新的命令時 Appium 會假設客戶端退出而後自動結束會話。 好比 60
autoLaunch Appium是否須要自動安裝和啓動應用。默認值true truefalse
language (Sim/Emu-only) 設定模擬器 ( simulator / emulator ) 的語言。 如: fr
locale (Sim/Emu-only) 設定模擬器 ( simulator / emulator ) 的區域設置。 如: fr_CA
udid 鏈接的物理設備的惟一設備標識 如: 1ae203187fc012g
orientation (Sim/Emu-only) 在一個設定的方向模式中開始測試 LANDSCAPE (橫向) 或 PORTRAIT (縱向)
autoWebview 直接轉換到 WebView 上下文。 默認值 false truefalse
noReset 不要在會話前重置應用狀態。默認值false truefalse
fullReset (iOS) 刪除整個模擬器目錄。(Android) 經過卸載——而不是清空數據——來重置應用狀態。在 Android 上,這也會在會話結束後自動清除被測應用。默認值 false truefalse

Android特有

關鍵字 描述 實例
appActivity 你要從你的應用包中啓動的 Android Activity 名稱。它一般須要在前面添加 . (如:使用.MainActivity 而不是 MainActivity) MainActivity.Settings
appPackage 你想運行的Android應用的包名

好比com.example.android.myApp,android

 com.android.settingsgit

appWaitActivity 你想要等待啓動的 Android Activity 名稱 SplashActivity
deviceReadyTimeout 設置等待一個模擬器或真機準備就緒的超時時間 5
androidCoverage 用於執行測試的 instrumentation 類。做爲命令 adb shell am instrument -e coverage true -w 的-w 參數。

com.my.Pkg/github

com.my.Pkg.instrumentation.MyInstrumentationweb

enablePerformanceLogging (僅適用於 Chrome 和 webview) 開啓 Chromedriver 的性能日誌。 (默認 false) truefalse
androidDeviceReadyTimeout 等待設備在啓動應用後準備就緒的超時時間。以秒爲單位。 如 30
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 or false
keystorePath 自定義 keystore 的路徑。默認: ~/.android/debug.keystore 如 /path/to.keystore
keystorePassword 自定義 keystore 的密碼。 如 123456
keyAlias key 的別名 如 androiddebugkey
keyPassword key 的密碼 如 123456
chromedriverExecutable webdriver 可執行文件的絕對路徑 (若是 Chromium 核心提供了對應的 webdriver, 應該用它代替 Appium 自帶的 webdriver) /abs/path/to/webdriver
autoWebviewTimeout 以毫秒爲單位,等待 Webview 上下文激活的時間。默認值 2000 如 4
intentAction 用於啓動 activity 的 intent action。 (默認值android.intent.action.MAIN)

如 android.intent.action.MAIN,chrome

android.intent.action.VIEWshell

intentCategory 用於啓動 activity 的 intent category。 (默認值android.intent.category.LAUNCHER)

如 android.intent.category.LAUNCHER,npm

android.intent.category.APP_CONTACTS

intentFlags 用於啓動 activity 的標識 ( flags ) (默認值 0x10200000) 如 0x10200000
optionalIntentArguments 用於啓動 activity 的額外 intent 參數 如 --esn <EXTRA_KEY>--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>
stopAppOnReset 在使用 adb 啓動應用前中止被測應用的進程 ( process ) 。若是被測應用是被另外一個應用建立的,當這個參數被設定爲 false 時,容許另外一個應用的進程在使用 adb 啓動被測應用時繼續存活。默認值 true 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

iOS特有

關鍵字 描述 實例
calendarFormat (Sim-only) 爲iOS的模擬器設置日曆格式 如 gregorian (公曆)
bundleId 被測應用的 bundle ID 。用於在真實設備中啓動測試,也用於使用其餘須要 bundle ID 的關鍵字啓動測試。在使用 bundle ID 在真實設備上執行測試時,你能夠不提供 app 關鍵字,但你必須提供 udid 。 如 io.appium.TestApp
udid 鏈接的真實設備的惟一設備編號 ( Unique device identifier ) 如 1ae203187fc012g
launchTimeout 以毫秒爲單位,在 Appium 運行失敗以前設置一個等待 instruments 的時間 好比: 20000
locationServicesEnabled (Sim-only) 強制打開或關閉定位服務。默認值是保持當前模擬器的設定 true 或 false
locationServicesAuthorized (Sim-only) 經過修改 plist 文件設定是否容許應用使用定位服務,從而避免定位服務的警告出現。默認值是保持當前模擬器的設定。請注意在使用這個關鍵字時,你同時須要使用 bundleId 關鍵字來發送你的應用的 bundle ID。 true 或者 false
autoAcceptAlerts 當 iOS 的我的信息訪問警告 (如 位置、聯繫人、圖片) 出現時,自動選擇接受( Accept )。默認值 false true 或者 false
autoDismissAlerts 當 iOS 的我的信息訪問警告 (如 位置、聯繫人、圖片) 出現時,自動選擇不接受( Dismiss )。默認值false true 或者 false
nativeInstrumentsLib 使用原生 intruments 庫 (即關閉 instruments-without-delay ) true 或者 false
nativeWebTap (Sim-only) 在Safari中容許"真實的",非基於 javascript 的 web 點擊 (tap) 。 默認值: false。注意:取決於 viewport 大小/比例, 點擊操做不必定能精確地點中對應的元素。 true 或者 false
safariInitialUrl (Sim-only) (>= 8.1) 初始化 safari 的時使用的地址。默認是一個本地的歡迎頁面 https://www.github.com
safariAllowPopups (Sim-only) 容許 javascript 在 Safari 中建立新窗口。默認保持模擬器當前設置。 true 或者 false
safariIgnoreFraudWarning (Sim-only) 阻止 Safari 顯示此網站可能存在風險的警告。默認保持瀏覽器當前設置。 true 或者 false
safariOpenLinksInBackground (Sim-only) Safari 是否容許連接在新窗口打開。默認保持瀏覽器當前設置。 true 或者 false
keepKeyChains (Sim-only) 當 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 (分組輸入) oneByOnegrouped 或setValue
screenshotWaitTimeout 以秒爲單位,生成屏幕截圖的最長等待時間。默認值: 10。 如 5
waitForAppScript 用於判斷 "應用是否被啓動」 的 iOS 自動化腳本代碼。默認狀況下系統等待直到頁面內容非空。結果必須是布爾類型。 例如 true;,target.elements().length > 0;$.delay(5000); true;

Appium-Server

瞭解了appium的關鍵字,再來看代碼裏面的參數,示例以下:

desired_caps = {
    'platformName': 'Android',
    'platformVersion': '4.4.4',
    'deviceName': 'S5',
    'appPackage': '',   #包名
    'appActivity': '',    #app入口
    'udid': '192.168.66.101:5555',  # genymotion設備
    'noReset': 'true',
    'unicodeKeyboard': 'True',
    'resetKeyboard': 'True',
}

這些參數,前六個參數都是必須的,後三個參數可視本身的配置使用。還有更多的參數,看上述的appium關鍵字便可,也能夠參照該文檔:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

參數定位

代碼示例以下:

account = driver.find_element_by_id('id/rel_content')
account.find_element_by_id('id/edit_acount')
driver.press_keycode(61)
print("換行操做")

if driver.find_element_by_id('id/img_clear_acount'):
    clr_account = driver.find_element_by_id('id/img_clear_acount').click()
    print("帳號清除成功")

account.send_keys('10086')
print("帳號輸入完畢")
time.sleep(2)

driver.press_keycode(61)
print("換行操做")

password = driver.find_element_by_id('id/rel_content')
password.find_element_by_id('id/edit_pass')
password.send_keys('123456')
print("密碼輸入完畢")
driver.find_element_by_xpath('//android.widget.TextView[@text="登 錄"]').click()
print("點擊登陸按鈕")

上述代碼中,使用到的常規定位方式,id,xpath,還有更多的操做api,可參見這篇博文,裏面總結的很詳細,Appium Python API 中文版

運行appium

代碼講述完畢,那又如何使用appium來運行代碼呢?步驟以下:

1.配置appium

打開appium,對參數進行配置,先配置dvices name,獲取devices name的方式使用命令adb devices便可,配置以下

2.服務設置

將server address配置爲本地ip便可,端口默認爲4723,配置以下:

3.啓動appium

點擊appium界面上的啓動按鈕,出現以下界面,則說明啓動成功。

服務啓動成功,則能夠運行代碼了,在模擬器中可查看到對應的操做。運行代碼時,會自動在真機或模擬器上安裝兩個app,appium settings和unlock,自動安裝的,能夠忽略。

上述就是Appium-Server使用的配置了,但Appium-Server有一兩年沒有更新了。Windows版在2015年末止步於的 AppiumForWindows_1_4_16_1.zip 。

因而,新的工具 Appium-desktop 來了! 它來繼續 Appium-Server的使命。固然,Appium-Server當前仍然是可用的。接下來則來講說Appium-desktop。

Appium-desktop

下載安裝

下載地址: https://github.com/appium/appium-desktop/releases/tag/v1.13.0,依照各自須要的版本下載便可。好比windows版,將下載下來的.exe文件,雙擊安裝便可。

安裝配置

在安裝好了以後,用appium-doctor來檢查是否配置成功,但新版的appium是沒有doctor文件的,因此須要經過npm下載並安裝,命令以下:

npm install -g appium-doctor

輸入命令後,出現以下圖所示界面:

安裝好了以後,再使用以下命令檢查新版的appium是否安裝成功,命令以下:

appium-doctor

輸入命令後,出現以下界面,則說明安裝成功:

啓用配置

1.啓動服務

打開安裝好的appium,出現以下界面

鏈接本機的話,host能夠不配置,就用默認的0.0.0.0,端口也用默認的4723,直接點擊start server v1.13.0按鈕,出現以下界面,說明服務啓動成功

2.新建鏈接

new session window,進入到以下頁面:

輸入參數以下:

參數配置好了以後,最好是保存下,避免下次使用的時候,須要再次輸入。

3.元素定位

點擊start session按鈕後,進入到以下頁面:

在該頁面就能夠進行元素定位了,元素定位的詳細api,能夠參見以前提到的那篇api文檔。

將寫好的代碼,在編譯工具中執行便可,即可在模擬器或真機上看到效果,效果圖就不上了。

問題總結

1.appium-desktop可支持安卓高版本

在模擬器那一篇博文中,我說我使用模擬器的緣由,就是由於老版的appium不支持android8及以上的版本,今天在使用appium-desktop時,發現能夠直接使用appium desktop定位元素。

2.'unicodeKeyboard' must be of type boolean; 'resetKeyboard' must be of type boolean

該問題是appium版本的問題,新版本unicodeKeyboard、resetKeyboard是布爾類型,將True的雙引號去掉,就能夠了,如:

'unicodeKeyboard': True,

'resetKeyboard': True,

以上就是我我的在使用上,對appium-server和appium-desktop認知的區別了,具體其餘的區別,還待深刻使用後發現。今天分享就到這了,有描述有誤的地方,歡迎批評指正。祝你們節日快樂。

 

本文僅表明做者觀點,系做者@溫一壺清酒發表。
歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。
文章出處:http://www.cnblogs.com/hong-fithing/
相關文章
相關標籤/搜索