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