python+uiautomator2+模拟器完成手机端自动化测试

329 阅读2分钟

1.uiautomtor2安装:

pip install uiautomator2

pip install pillow (如果需要截图,可安装这个库)

2.模拟器下载: 网易模拟器: mumu.163.com/baidujp/?ld 下载好了安装, 启动模拟器 找到设置-> 关于平板电脑 -> 双击很多次 版本号 进入开发者模式 ,然后打开usb调试,此时不要急着去adb devices查看链接,因为执行了connect才会有adb devices

image.png

打开了之后可以用uiautomotor2连接了。

image.png

有相关的打印就链接成功了:

image.png

注意:连接的时候不要手动去执行adb connect '127.0.0.1:7555'执行完之后执行代码会报错的。手动执行了会有adb devices 但是代码再去链接就会报adb异常 如:

error: unknown host service

4.操作模拟器:

1.下载apk:

d.app_install("链接")

image.png

image.png

常见的操作参考链接: www.jb51.net/article/205…

#coding:utf-8
import uiautomator2 as u2
import os
def main():
    os.system("python -m uiautomator2 init --mirror")
    d = u2.connect('127.0.0.1:7555')
    #从URL安装apk
    #从网页上随便扣一个apk安装路径
    #href = "https://files.cnblogs.com/files/FightForFreedom/app-release.apk"
    #d.app_install('https://files.cnblogs.com/files/FightForFreedom/app-release.apk')
    #包名获取方法:方法一:
    #输入命令:adb shell am monitor
    #然后启动需要获取包名的应用 参考这个网页:https://blog.csdn.net/No_PainNo_Gain/article/details/106782947
    d.app_start('com.hhxplaying.neteasedemo.netease')
    #清空数据
    #d.app_clear('com.hhxplaying.neteasedemo.netease')
    #d.app_stop_all() #停止所有的应用
    #d.disable_popups()  # 自动跳过弹出窗口 针对有跳出窗口的app
    #d.disable_popups(False)  # 禁用自动跳过弹出窗
    # 获取窗口大小
    print("窗口大小:",d.window_size())
    # 获取当前应用程序信息。对于某些android设备,输出可以为空
    print("程序信息:",d.current_app())
    # 获取设备序列号
    print("设备序列号:",d.serial)
    # 获取WIFI IP
    print("WIFI IP:",d.wlan_ip)
    # 获取详细的设备信息
    print("设备信息:",d.device_info)
    #获取app信息
    app_info = d.app_info("com.hhxplaying.neteasedemo.netease")
    print("app_info: ",app_info)
    # 保存应用程序图标
    img = d.app_icon("com.hhxplaying.neteasedemo.netease")
    img.save("icon.png")
    # 停止应用:强行停止
    d.app_stop('com.hhxplaying.neteasedemo.netease')
    # push文件夹
    d.push("foo.txt", "/sdcard/")
    # push和重命名
    d.push("foo.txt", "/sdcard/bar.txt")
    # push fileobj
    with open("foo.txt", 'rb') as f:
        d.push(f, "/sdcard/")
    # 推动和更改文件访问模式
    d.push("foo.txt", "/data/local/tmp/", mode=0o755)
    d.pull("/sdcard/bar.txt", "bar.txt")
    # 如果在设备上找不到文件,FileNotFoundError将引发
    try:
        d.pull("/sdcard/some-file-not-exists.txt", "tmp.txt")
    except FileNotFoundError:
        pass
    #打开屏幕
    d.screen_on()
    #关闭屏幕
    d.screen_off()
    #获取屏幕状态:
    screen_status = d.info.get('screenOn')
    print("屏幕状态:",screen_status)
    d.press("home")  # 点击home键
    d.press("back")  # 点击back键
    d.press("left")  # 点击左键
    d.press("right")  # 点击右键
    d.press("up")  # 点击上键
    d.press("down")  # 点击下键
    d.press("center")  # 点击选中
    d.press("menu")  # 点击menu按键
    d.press("search")  # 点击搜索按键
    d.press("enter")  # 点击enter键
    d.press("delete")  # 点击删除按键
    d.press("recent")  # 点击近期活动按键
    d.press("volume_up")  # 音量+
    d.press("volume_down")  # 音量-
    d.press("volume_mute")  # 静音
    d.press("camera")  # 相机
    d.press("power")  # 电源键
    d.unlock()#解锁屏幕
    



if __name__ == '__main__':
    main()