1安装的链接
- 装uiautomator2
pip install --upgrade uiautomator2
pip install pillow - 部署守护进程
python -m uiautomator2 init - 装weditor UI查看器
pip install -U weditor
运行python -m weditor #确保手机连接电脑,会自动安装一个atx调试器 - 备注:每次启动时运行python -m uiautomator2 init 和 python -m weditor就可以了
- 通过wifi连
要求设备IP和pc在同一网络中
import uiautomator2 as u2
d = u2.connect(‘设备ip’)
print(d.info) - 通过usb连
import uiautomator2 as u2
d = u2.connect(‘设备序列号’)
print(d.info) - u2.connect()不带参数调用,uiautomator2将从环境变量中获取设备ip(ANDROID_DEVICE_IP),如果此环境变量为空,则uiautomator将退回到connect_usb,需要保证只有一台设备连接到电脑
Uiautomator2基础_xia@xia的博客-CSDN博客
2.打开手机屏幕
#coding=utf8
import uiautomator2 as u2
import time
import os,re #可以不用
import logging
import paopao_login
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(funcName)s - %(message)s')
logger = logging.getLogger(__name__)
d = u2.connect('MQS7N19423008360')
print(d.info)
def open():
if d(resourceId="com.android.systemui:id/mask_top").exists:#获取屏幕锁屏的状态属性
logger.info("处于锁屏状态")#打印处于锁屏状态
d.screen_on()#把屏幕唤醒
time.sleep(1)
swipe()#调取滑动的函数
else:
print("当前非锁屏状态") #当前非锁屏状态
paopao_login.run_app() #启动app
def swipe():
d.swipe_points([(452,2046), (0,375)], 0.05)#滑动屏幕
logger.info("检测是否需要解锁图案锁")
if d(resourceId="com.android.systemui:id/keyguard_fixed_length_pin_view").exists:#通过是否存在元素检测是否需要再次解锁
logger.info("需要解锁")
d.click(851,1621)
d.click(230,1644)
d.click(521,1819)
d.click(278,1392)
d.click(521,1819)
d.click(278,1392)
time.sleep(1)
if d(resourceId="com.huawei.android.totemweather:id/widget_time_hour").exists:#判断是否存在解锁后的页面上的元素
logger.info("进入屏幕")
paopao_login.run_app()
else:
logger.info("没有进入主屏幕")
paopao_login.login_app()#如果已经在app里了。调用登录模块判断是否已经登录
else:
logger.info("解锁失败")
open()
3.编写登录模块
#coding=utf8
import uiautomator2 as u2
import time
import os,re #可以不用
import logging
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(funcName)s - %(message)s')
logger = logging.getLogger(__name__)
d = u2.connect('MQS7N19423008360')#连接手机devices序列号
print(d.info)
def run_app():
d.app_start("com.xx.android")#打开程序
if d.session("com.xx.android", attach=True):#判断程序是否打开
logger.info("已打开程序")
login_app()
if d(resourceId="com.xx.android:id/login").exists(timeout=5):#exists:等待元素出现
logger.info("当前是登录页面")
login_app()
try:#如果不是登录页面,尝试从最开始滑动开始
print("从授权开始")
d(text="始终允许").click(timeout=1)
d(text="始终允许").click(timeout=1)
d(text="始终允许").click(timeout=1)
d(text="始终允许").click(timeout=1)
d(text="同意").click()
#以上为同意权限
d.xpath('//android.widget.FrameLayout[1]').swipe("left")
d.xpath('//android.widget.FrameLayout[1]').swipe("left")
d.xpath('//android.widget.FrameLayout[1]').swipe("left")
d(resourceId="com.thinksns.sociax.android.nic:id/btn_login").click(timeout=1)
#以上为滑动页面
login_app()#滑动后进入登录页面调取登录框
except Exception as e:#如果报错抛出报错
print(e)
else:
logger.info("打开程序出错")
def login_app():
if d(resourceId="com.xx.android:id/email").exists:#判断登录框的元素是否存在
d(resourceId="com.xx.android:id/email").set_text('xx')
d(resourceId="com.xx.android:id/password").set_text('123456')
try:
d(resourceId="com.xx.android:id/login").click(timeout=10)#登录的时候等待10秒
except Exception as e:
print(e)
if d(resourceId="com.xx.android:id/ntm_close"):#判断程序是否打开
print("已找到弹出框")
else:
print("登录错误")
else:
logger.info("泡泡已经登录")#如果找不到元素,提示已经登录
4.非锁屏 登录的情况下运行的结果