python-UiAutomator学习&使用
一、安装
源码地址:
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? 待定。。