Appium-Server與Appium-Desktop的區別


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

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

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

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,

 com.android.settings

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

com.my.Pkg/

com.my.Pkg.instrumentation.MyInstrumentation

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,

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 參數 如 --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不支持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認知的區別了,具體其他的區別,還待深入使用后發現。今天分享就到這了,有描述有誤的地方,歡迎批評指正。祝大家節日快樂。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM