一、安裝
源碼地址:
https://github.com/xiaocong/uiautomator#basic-api-usages
①下載zip包,解壓到本地目錄下
②進入對應目錄下,執行
$sudo python setup.py install
命令行提示uiautomator安裝成功,現在可以開始用python編寫uiautomator腳本了~~
二、使用
https://github.com/xiaocong/uiautomator#basic-api-usages
作者提供了所有API的解釋說明,可直接查詢使用。
還有個PPT,PPT地址:
http://xiaocong.github.io/slides/android-uiautomator-and-python/#/main
以下是在具體操作TV的過程中使用到的API,記錄一下 ~~~~
#coding:utf-8 import time from uiautomator import device as d d.press.enter()time.sleep(5) print(d(className="android.widget.FrameLayout").child(resourceId="com.stv.launcher:id/metro_space").child_by_instance("0", className="android.view.View").count) print (d(className="android.widget.FrameLayout").child(resourceId="com.stv.launcher:id/metro_space", className="android.support.v4.view.ViewPager").count) print (d(className="android.widget.FrameLayout").child(resourceId="com.stv.launcher:id/metro_space", className="android.support.v4.view.ViewPager")[0].info) print (d(className="android.widget.FrameLayout").child(resourceId="com.stv.launcher:id/metro_space", className="android.support.v4.view.ViewPager")[1].info) print (d(className="android.view.View").count) print (d(className="android.view.View")[0].info) print (d(className="android.view.View")[1].info) print (d(className="android.widget.FrameLayout").child(resourceId="com.stv.launcher:id/metro_space").child(index=2).count) print (d(text="熱點聚焦").info) d(text="播放記錄").click() print (d.exists(className="android.widget.FrameLayout")) d.dump("home.xml") print (d(resourceId="com.letv.android.tv.letvlive:id/title",instance=0).text) d.click(1100,850)
三、在TV測試使用過程中遇到的問題及局限性
還是比較方便,基本的UI操作基本都能覆蓋。但使用起來還是不夠得心應手。
1.TV上的click操作和手機上不同,手機上可直接實現點擊操作,但TV上的click操作首先實現的是焦點移動,再次click或者pressEnter才實現點擊進入操作;但TV上某些APP並未支持click移動焦點操作,只支持模擬遙控器輸入實現上下左右移動;
用Java實現的時候,采用的方法是:模擬遙控器上下左右移動直到找到所需控件,然后再進行操作。但python未找到API可定位當前控件是否focused,無法實現該功能。(或許作者的初衷也只是方便手機使用,畢竟API中也提供了大量縮放、滑動等操作,這些操作更適用於手機設備)
2.定位到元素,想打印出控件info,TV桌面經常重啟,導致運行timeout 。 這個問題使用java的時候未出現過,目前無法定位python在查詢控件信息並顯示出來的過程中執行了什么操作又或者是桌面自身BUG? 待定。。