Appium+python自動化-啓動app

Appium+python自動化-啓動app


環境已經搭建好了,接下來就是需要啓動APP,如何啓動app呢?首先要獲取包名,然後獲取launcherActivity。獲取這兩個關鍵東西的方法很多,這裏就不一一多說,小夥伴們可以各顯神通。小編這裏主要給大家推薦一個sdk自帶的實用工具aapt. 


    aapt即Android Asset Packaging Tool,在SDK的build-tools目錄下。該工具可以查看apk包名和launcherActivity,當然還有更多的功能,有興趣的可以查看相關資料。


一、下載aapt

    1.在android-sdk裏面雙擊SDK-manager,下載buidl-tools




 


    2.勾選build-tools,隨便選一個版本,我這裏選的是24的版本




 


    3.下載完成後,在D:\androidsdk\android-sdk-windows\build-tools\24.0.0目錄下找到aapt.exe,將這個路徑設置環境變量,添加到path下




 


    4.打開cmd。輸入aapt出現如下界面,說明環境OK了




二、獲取apk包名

    1.將準備測試的APK放到D盤某個目錄,如D:\test


2.打開cmd,輸入指令aapt dump badging D:\test\xxx.apk(APK的全名,如手機淘寶.apk)


如果APK名字帶有空格,則把路徑用雙引號括起來。


aapt d badging "d:\apktest\QQ 7.1.8.apk"


 


結果是


package: name='com.tencent.mobileqq' versionCode='718' versionName='7.1.8' platformBuildVersionName=''


install-location:'auto'


sdkVersion:'15'


targetSdkVersion:'9'


   3.以手機淘寶.apk爲例,如下圖




    4.這裏就可以看到apk的包名:com.taobao.taobao


注:老司機可以直接把apk放在桌面上,輸入指令後拖到cmd框


三、獲取launcherActivity

    1.接着上一步操作,cmd屏幕拖到中間找到launcherActivity


    2.這裏可以看到,淘寶的launcherActivity值爲com.taobao.tao.welcome.Welcome




QQ的launchable


launchable-activity: name='com.tencent.mobileqq.activity.SplashActivity' label='QQ'


四、寫腳本

    1platformName:這裏是android的apk


    2.deviceName:手機設備名稱,通過adb devices查看


    3.platformVersion:android系統的版本號。見問題解答裏的版本對應API。注意要與APPNIUM裏的兼容性版本號保持一致。


    4.appPackage:apk包名


    5.appActivity:apk的launcherActivity




   


五、運行appium

    1.啓動appium,右上角點三角形按鈕,變成正方形,就是啓動狀態。




    2.確認手機連上電腦




    3.在pycharm運行腳本,隨後在手機上會彈出安裝下面兩個軟件的提示,安裝後,桌面上多兩個圖標。那麼恭喜你啓動成功!




 


4.接着會看到淘寶app已經啓動啦,有木有小激動~~


 


運行前,注意事項

先清空appium裏的日誌內容,點擊垃圾箱,重啓一下她,點擊右上角的方框,讓其重啓變三角,再變方框。



2/檢查設備連接情況



3.檢查設備裏的設置裏的系統版本號。

4.在DOS裏執行如下兩個命令,讓其每次都要重新使用

C:\.....>adb uninstall io.appium.unlock


返回Success


C:\.....>adb uninstall io.appium.settings


返回Success


 


5.版本號一致檢查

Android SDK裏的版本號獲取,APPNIUM裏的安卓設置版本號,還有腳本里的平臺版本號,需要都保持一致。




   


 


6.運行appium出錯的話,請查看appium技巧與問題集錦文檔。

六、最終代碼如下

# coding=utf-8


from appium import webdriver


desired_caps = {


                'platformName': 'Android',


                'deviceName': '30d4e606',


                'platformVersion': '5.0',


                # apk包名


                'appPackage': 'com.taobao.taobao',


                # apk的launcherActivity


                'appActivity': 'com.taobao.tao.welcome.Welcome'


                }


driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)


這個地址是怎麼來的呢?




 


這一篇主要學會使用aapt工具,然後啓動app的一個流程,啓動app後,下一步就是要定位元素了,定位元素android sdk裏面用一個自帶的uiautomatorviewer,appium裏面也有一個Inspector,下篇會詳細介紹。


 


QQ的啓動,腳本如下


# coding=utf-8


from appium import webdriver


desired_caps = {


'platformName': 'Android',


'deviceName': 'C4Y5T16C08002942',


'platformVersion': '6.0',


# apk包名


'appPackage': 'com.tencent.mobileqq',


# apk的launcherActivity


'appActivity': 'com.tencent.mobileqq.activity.SplashActivity'


}


driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)


八、問題解答

1.Adb deviecs問答

通過DOS命令,執行查看連接手機情況,出現如下異常


C:\Users\xu.lei>adb devices


List of devices attached


adb server version (31) doesn't match this client (39); killing...


error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常每個套接字地址(協議/網絡地址/端口)只允許使用一次。 (10048)


 


This application has requested the Runtime to terminate it in an unusual way.


Please contact the application's support team for more information.


could not read ok from ADB Server


* failed to start daemon *


error: cannot connect to daemon


原因分析:

這個是socket 的端口被佔用了,我這裏是因爲360手機助手佔用了這個端口,所以其他的就不能夠用了。


查看端口被誰佔用的方法有兩個


第1個方法是採用DOS命令,


netstat –nao


第2個方法是windows系統自帶的"資源管理器"能查看端口使用情況,具體操作方法如下:


(1)如下圖紅色箭頭標記,鼠標右鍵單擊任務欄空白處,在彈出的右鍵菜單裏選擇"任務管理器":




(2)如下圖紅色圓圈標記,在"任務管理器"裏,切換到"性能"選項卡,再點擊"打開資源管理器":




(3)在"資源管理器"裏,點擊"網絡",在"網絡活動的進程"中勾選需要查詢的進程,這時最下面一欄"偵聽端口"就會顯示這個進程(軟件)所使用的端口了:




 


 


解決辦法:

卸載了360的手機助手就可以了,


首先 打開360安全衛士,點擊右下角的 "更多+"-》點擊"我的工具"-》點擊左下角的"編輯"-》點擊"手機助手"上面的X號


 


這個時候可能會刪除不了,那麼就要刪除手機助手的進程,如圖裏面的360Mobile。。這些,然後就可以刪除了


然後再執行adb 命令就可以了




2. adb查看設備的時候,顯示 List of devices attached

現象

C:\>adb devices


查看設備的時候,顯示 List of devices attached


 


解決方法:

到設備管理器查看驅動是否安裝成功。

查看這些驅動程序,有沒有手機驅動或者說有個帶黃色歎號的Android標識,如果出現這兩種情況那問題就定位在手機驅動程序上了。

解決方案:1.可以安裝豌豆莢,它會自動安裝手機驅動2.可以自己在網上找一個手機驅動,進行安裝—這個是最直接的方法,華爲手機就是裝了驅動,才顯示出來的。3.手機上打開開發者調試模式,可以打開設置—關於—版本號,點擊5次,即可打開開發者模式。


2、


5.運行命令行


adb kill-server


adb devices


即可查看到設備


C:\Users\XXXi>adb devices


List of devices attached


C4Y5T16C08002942 device


 


 


3.

Android 7.0系統的手機無法執行appium腳本的問題

Appium Appium 版本 1.4.16,Android 設備固件 7.x,執行腳本時,報錯使用語言:python報錯如下:

WebDriverException: Message: A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"])


這個是因爲appium版本1.4.16 使用的 uiatumator1.0不支持的原因導致?如果不升級appium版本,是否有解決方案?


解決辦法

uiautomator1.0應該是不支持7.0,不升版本就換用uiautomator2.0吧,或者用下面的改腳本的方法使用。


解決Android 7.0系統的手機無法執行appium腳本的問題,改問題的具體解決方法如下:


找到appium的安裝目錄下的adb.js文件,windows版本的目錄如下:Appium\node_modules\appium\node_modules\appium-adb\lib

2、 打開adb.js,手動修改該文件下的內容,此方法我已經試驗成功。

adb.js 中1035 行this.shell("ps '" + name + "'", function (err, stdout) {

對應執行的指令是ps 'uiautomator', Android7不支持這個指令格式,所以執行結果是bad pid 'uiautomator'

目前Appium未對此進行處理,所以需要修改此指令的執行方式

即將

this.shell("ps '" + name + "'", function (err, stdout) {

if (err) return cb(err);

替換成

this.shell_grep("ps", name, function (err, stdout) {


if (err) {


logger.debug("No matching processes found");

return cb(null, []);


}


並增加上面用到的shell_grep函數:

ADB.prototype.shell_grep = function (cmd, grep, cb) {

if (cmd.indexOf('"') === -1) {

cmd = '"' + cmd + '"';

}

var execCmd = 'shell ' + cmd + '| grep ' + grep;

this.exec(execCmd, cb);


};


 


 


 


網上還有如下的修改解決辦法:以下我未試驗。

ADB.prototype.getPIDsByName = function (name, cb) {

logger.debug("Getting all processes with '" + name + "'");

this.shell("ps '" + name + "'", function (err, stdout) {

if (err) return cb(err);

stdout = stdout.trim();

var procs = [];

var outlines = stdout.split("\n");

outlines.shift(); //在該處添加此行代碼

3、重啓appium

   


 


4.安卓版本號與API的對應關係

Android Platform Version與API Level的對應表


   


Platform Version


API Level


VERSION_CODE


Notes


Android 6.0


23


M


Platform Highlights


Android 5.1


22


LOLLIPOP_MR1


Platform Highlights


Android 5.0


21


LOLLIPOP


Android 4.4W


20


KITKAT_WATCH


KitKat for Wearables Only


Android 4.4


19


KITKAT


Platform Highlights


Android 4.3


18


JELLY_BEAN_MR2


Platform Highlights


Android 4.2, 4.2.2


17


JELLY_BEAN_MR1


Platform Highlights


Android 4.1, 4.1.1


16


JELLY_BEAN


Platform Highlights


Android 4.0.3, 4.0.4


15


ICE_CREAM_SANDWICH_MR1


Platform Highlights


Android 4.0, 4.0.1, 4.0.2


14


ICE_CREAM_SANDWICH


Android 3.2


13


HONEYCOMB_MR2


  


Android 3.1.x


12


HONEYCOMB_MR1


Platform Highlights


Android 3.0.x


11


HONEYCOMB


Platform Highlights


Android 2.3.4

Android 2.3.3


10


GINGERBREAD_MR1


Platform Highlights


Android 2.3.2 Android 2.3.1

Android 2.3


9


GINGERBREAD


Android 2.2.x


8


FROYO


Platform Highlights


Android 2.1.x


7


ECLAIR_MR1


Platform Highlights


Android 2.0.1


6


ECLAIR_0_1


Android 2.0


5


ECLAIR


Android 1.6


4


DONUT


Platform Highlights


Android 1.5


3


CUPCAKE


Platform Highlights


Android 1.1


2


BASE_1_1


  


Android 1.0


1


BASE


  


 


 


我們在項目開發過程中,常常需要查看API Level和sdk版本,來進行一些方法的調用,有時候還需知道對應發佈的時間,可以來了解我們最低兼容到的版本是什麼時候發佈的。


在這裏貼出來方便以後查看:


https://developer.android.com/guide/topics/manifest/uses-sdk-element.html

Android version history

Platform Version


API Level


VERSION_CODE


Issue Date


Android 1.0


1


發條機器人


2008-09


Android 1.1


2


Petit Four 花式小蛋糕


2009-02


Android 1.5


3


Cupcake 紙杯蛋糕


2009-04


Android 1.6


4


Donut 甜甜圈


2009-09


Android 2.0


5


Éclair 鬆餅


2009-10


Android 2.0.1


6


Éclair 鬆餅


2009-10


Android 2.1


7


Éclair 鬆餅


2009-10


Android 2.2-2.2.3


8


Froyo 凍酸奶


2010-05


Android 2.3-2.3.2


9


Gingerbread 薑餅


2010-12


Android 2.3.3-2.3.7


10


Gingerbread 薑餅


2010-12


Android 3.0


11


Honeycomb 蜂巢


2011-02


Android 3.1


12


Honeycomb 蜂巢


2011-02


Android 3.2


13


Honeycomb 蜂巢


2011-02


Android 4.0-4.0.2


14


Ice Cream Sandwich 冰激凌三明治


2011-10


Android 4.0.3-4.0.4


15


Ice Cream Sandwich 冰激凌三明治


2011-10


Android 4.1


16


Jelly Bean 糖豆


2012-07


Android 4.2


17


Jelly Bean 糖豆


2012-07


Android 4.3


18


Jelly Bean 糖豆


2012-07


Android 4.4


19


KitKat 奇巧巧克力棒


2013-10


Android 4.4W


20


KitKat with wearable extensions 奇巧巧克力


2013-10


Android 5.0-5.0.2


21


Lollipop 棒棒糖


2014-11


Android 5.1


22


Lollipop 棒棒糖


2014-11


Android 6.0-6.1


23


Marshmallow 棉花糖


2015-10


Android 7.0


24


Nougat 牛軋糖


2016-08


Android 技術棧


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章