1. 程式人生 > 實用技巧 >Appium之啟動第一個App

Appium之啟動第一個App

搭建appium自動化環境真是各種問題呀。

如何啟動在真機上啟動App?

執行操作:操作Android真機上開啟手機淘寶app,並搜尋“熊貓”。

指令碼原始碼如下:

from appium import webdriver
from time import sleep

desired_caps = {
    'autoLaunch': "True",
    'platformName': "Android",
    'deviceName': "VBJDU18509008035",
    'platformVersion': "10.0",
    'appPackage
': "com.taobao.taobao", 'appActivity': "com.taobao.tao.welcome.Welcome", 'noReset': "True", # 啟動app時不要清除app裡的原有的資料。 "unicodeKeyboard": "True", # 使用unicode編碼方式傳送字串(以便鍵盤輸入中文) "resetKeyboard": "True", # 在執行具有unicodeKeyboard功能的Unicode測試之後,將鍵盤重置為其原始狀態。若單獨使用,則忽略。(後需手動進入系統修改回原鍵盤輸入法)
} driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) driver.find_element_by_xpath('//*[@resource-id="com.taobao.taobao:id/sv_search_view"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.view.View[2]').click() sleep(
5) # 延遲,不然老報錯未找到元素 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys("熊貓") driver.find_element_by_id("com.taobao.taobao:id/searchbtn").click() # driver.find_element_by_xpath('//*[@resource-id="com.taobao.taobao:id/rv_main_container"]/android.widget.FrameLayout[4]/android.widget.FrameLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.FrameLayout[3]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]').click() # driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("食品")').click() # 使用text屬性 # driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("寵物")').click() 

Desired Capabilities常用關鍵字詳解:

Desired Capabilities 在啟動 session 的時候是必須提供的。Desired Capabilities 本質上是以 key value 字典的方式存放,客戶端將這些鍵值對發給服務端,告訴服務端我們想要怎麼測試。

(官方文件地址:https://appium.io/docs/en/writing-running-appium/caps/#appium-desired-capabilities)

關鍵字 描述 例項
autoLaunch

是否需要自動安裝或啟動應用。預設為True

True或False
automationName 想使用的自動化測試引擎 Appium(預設)或Selendroid
platformName 移動裝置的作業系統 iOS或Android或FirefoxOS
platformVersion 移動裝置作業系統的版本號 如10.0
deviceName 移動裝置型別或者模擬器型別 iPhone Simulator,iPad Simluator,Android Emulator等。(在Android上,這個關鍵字目前不起作用)
udid 連線的物理裝置的唯一裝置標識 如VBJDU415DG3
newCommandTimeout

設定命令超時時間,單位:秒,預設值為60

(如果達到超時時間且仍未接受到新的命令時,appium-server會假設客戶端退出然後自動結束會話。)

如120
autoWebview

直接轉換到Webview上下文。預設值 為False

True,False
noReset 不要要會話前清除應用狀態。預設值為False True,False
fullReset

iOS:刪除整個模擬器目錄。

Android:通過解除安裝而不是清空資料來重置應用狀態。

在Android上,這也會在會話結束後自動清除被測應用。預設值False。

True,False
browserName

啟動手機瀏覽器

iOS:Safari

Android:Chrome,Browser

orientation 設定移動裝置的方向模式為橫屏或豎屏 LANDSCAPE(橫向) 或PORTRAIT(縱向)

前提:已安裝Android_SDK、python、appium-server等環境。

1、在手機安裝待測app,同時電腦上也儲存有該待測app;

2、手機與電腦通過USB連線,並開啟【開發人員選項】,開啟【USB除錯】:

對於華為手機,進入【關於手機】,連續點選【版本號】7次,則提示“手機已處於開發者模式”;再進入【系統和更新】,即可看到【開發人員選項】,進入即可開啟【USB除錯】。

3、確保手機與電腦連線,進入cmd命令列,執行命令:adb devices,得到裝置資訊如下:

由於我的手機與電腦連線後,一直獲取不到裝置資訊,後再電腦上下載安裝360手機助手,再執行adb devices就可以獲取到裝置資訊了,神奇!

4、執行命令:aapt dump badging E:\AndroidTest\xxx.apk(APK的全名,如手機淘寶.apk),獲取app的appPackage和appActivity資訊:

5、開啟appium-server:

由於使用AppiumForWindows_1_4_16_1一直報錯"Could not parse activity from dumpsys ",後重新安裝Appium-desktop作為appium-server(下載地址為https://github.com/appium/appium-desktop/releases)

6、定位需要的元素:

由於使用Android_SDK自帶的uiautomatorviewer工具時老是報錯“Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!”,後改用了weditor。

即uiautomator2,是一個自動化測試開源工具,僅支援Android平臺的原生應用測試。

GitHub地址:https://github.com/openatx/uiautomator2。

安裝:pip install --pre weditor

在瀏覽器上執行:python -m weditor

ps:adb如何無線連線手機的方法?(手機和電腦已處在同一網路下)

(1)進行cmd命令列,手機通過USB線連線到電腦,且手機開啟USB除錯;

(2)執行命令 :adb devices,檢視裝置連線情況:

(3)執行命令:adb tcpip 5555,開啟手機的5555埠(預設埠,也可以用其他埠):

(4)執行命令:adb shell ip -f inet addr show wlan0,檢視手機的ip地址:

(5)執行命令:adb connect ip:port,無線連線裝置:

(6)再次執行命令:adb devices,可以看到 通過ip連線的裝置:

常見問題及解決參考

問題1:使用appium在Android真機上測試時報錯“command failed shell 'ps' uiautomator”?

解決參考:https://blog.csdn.net/pjl6523853/article/details/72886048

問題2:Android真機,每次啟動都會安裝appiumsetting和unlock?

解決參考:https://www.cnblogs.com/syw20170419/p/8358523.html

問題3:執行uiautomatorviewer.bat閃退?

參考解決:降低jdk版本(如版本Java SE Development Kit 8u261)。

問題4:uiautomatorviewer工具定位網頁元素時報錯“Error obtaining UI hierarchy”?

解決參考:https://www.wandouip.com/t5i337805/

(ps:沒有試過...,改用weditor了。)

問題5:執行指令碼時“An unknown server-side error occurred while processing the command. Original error: The instrumentation process cannot be initialized.”?

解決參考:執行指令碼前,先關閉weditor,包括cmd視窗、瀏覽器視窗和ATX軟體(停止所有服務),再重啟Appium-server。

參考:https://www.cnblogs.com/poloyy/p/12679388.html

參考:https://www.cnblogs.com/yoyoketang/tag/appium/default.html