注意,在安装时处理截图数据要额外安装pillow库pip install pillow
即可。在安装uiautomator2不成功时,可以尝试把–pre换成-U或者-e去进行安装。
1.pip install —pre weditor
2.python -m weditor —shortcut
在安装了之后点击桌面的图标就可以直接开启服务器监听通过浏览器来进行画面操作测试
也可以通过命令行命令python -m weditor来进行启动
注意在启动运行时勿关闭窗口,否则直接结束服务器监听
无论使用appium还是uiautomator2都需要adb的安装,在使用时请确认安装部署了adb。
1.使用adb查看设备编号
电脑usb接口连接手机后打开命令行输入adb devices
按下回车后出现下图,adb没反应说明环境变量没配好,需要进行adb的环境变量配置。
2.浏览器打开weditor打开的服务器地址
输入第一步的divice码,点击connect,成功后connect有如下图图标显示
3.菜单栏说明
第一个为选择手机系统(ios的我还没尝试过),第二个为设备编号,第三个为连接,第四个为刷新页面获取最新的元素,最后那个为是否实时获取手机页面
def __init__(self):
subprocess.run('python -m uiautomator2 init')
time.sleep(3)
self.d = u2.connect_usb()
print(self.d.device_info)
直接初始化即可。connect_usb不指定参数为自动连接,默认即可。
在连接了之后我们可以调用device_info来获取手机的参数进行确认是否连接成功。
启动APP可以直接桌面坐标来进行点击启动,也可以获取包名来启动,杀掉APP同样需要通过包名去定位。
获取包名也很简单,我们可以进入需要启动的APP,点击一下浏览器中的Dump Hierachy刷新一下获取到的元素。
随便点击页面内的任一框,
把包名复制下来即可。
启动APP命令为:d.app_start(APP包名)
杀掉APP命令为:d.app_stop(APP包名)
1.resourceId定位
d(resourceId=)
这种方法是最方便的,但是一个APP很多地方都不会有这种特定的标识
2.className定位
d(className=)
这个方法也很方便,但是弊端也是同个界面多个元素使用同一个className
3.xpath定位
d.xpath()
在以上方法都不行时就需要xpath定位了,弊端是APP当中的元素id跟classname的影响代码很冗长,同样的如果在APP爬虫中,xpath的优势就变得明显了
4.text定位
d(text=)
使用文本去确定操作的区域,好处是方便进行定位,在没有文本的就不能进行此项操作,具有局限性
5.坐标定位
d.click(坐标)
使用cilck方法通过坐标定位需要点击的元素,通过这个方法可以点击的操作都可以进行完成
d.click()
如果用变量接收了元素定位就把d替换成变量即可
d.long_click()
长点击
d(focused=True).set_text(需要发送的内容)
通过这个方法就可以输送需要传递的文本了,set_text直接清掉文本框内的内容,且set_text需要定位才能进行使用。
d.send_keys(需要发送的内容)
两个方法都可以使用,sendkeys是接着写入。
d(focused=True).clear_text()
清除元素可编辑的内容
跟appium一样获取页面元素存在着延时,使用d.dump_hierarchy()
可以进行刷新,方便获取到最新的元素,配合延时使用。在延时之后进行刷新。
d.swipe(x1, y1, x2, y2)
表示从x1y1的位置滑动到x2y2
d(scrollable=True).scroll.toBeginning()
滑到顶端
d(scrollable=True).scroll.horiz.toBeginning()
滑到最左侧
d(scrollable=True).scroll.toEnd()
滑到底部
d(scrollable=True).scroll.horiz.toEnd()
滑到最右侧
d(scrollable=True).scroll.to(description="指定位置")
滑到下方指定位置
d(scrollable=True).scroll.horiz.to(description="指定位置")
滑到右方指定位置
d(scrollable=True).scroll.forward.to(description="指定位置")
滑到上方指定位置
d(scrollable=True).scroll.forward.horiz.to(description="指定位置")
滑到左方指定位置
d.drag(x1,y1,x2,y2)
与滑动事件类似,在滑动过程长点击
d.wait_timeout = 20.0
默认为20s
d.screenshot()
需要安装pillow库
d.exists(timeout=5)
timeout不是必需品,默认为立马判断,设置后可以等待,判断元素是否存在存在返回True,不存在返回False,在一些操作上通过这个可以判断是否更进一步进行操作,例如在添加用户、密码等操作时,判断是否添加满,如果满了就开始删除操作.。
d.get_text()
获取元素的文本值
d.press.home()
点击手机home键
back为返回键,最常用的为这两个按键,其他需要则自行百度
最近在工作中写到一个APP的添加密码操作,添加密码按键需要下拉到最下方进行添加,初始为第四,每次添加到10个密码左右想继续添加就需要进行下拉,下拉完成后,xpath坐标又重置了,在这种情况下注意下拉完成后的xpath坐标,通常只变换一个数字,在重复操作后xpath坐标变换的数字是一样的,所以可以加个值进行传值操作在达到什么数字时进行下拉然后重置数字。
d(className='').count
统计获取相同定位条件的元素
在获取到数量后我们就可以通过数量来对元素进行定位,如d(className=’’).count[0]获取第一个对象。
同时获取到的元素是可迭代的对象,for i in d(className='')
如果进行APP爬虫的操作时,可以通过这个遍历来获取到我们需要的数据。
之前有使用过Appium写过一些爬虫和脚本,当时的使用体验可谓极差,响应慢。在做过一次爬虫就弃之不用,直到最近工作中要求写一些APP自动化脚本时发现新大陆,uiautomator2让我感受到了速度,让我体验到了快的感觉,真不愧是谷歌发布的框架。在使用时要注意睡眠和刷新元素在这两个配合下几乎无往不利,在一些重复枯燥的事情上解放双手。