第一步:安装adb(用于沟通电脑与手机或平板的桥梁)
adb下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
以本文为例文件解压后路径为:E:\adb\platform-tools
通过win键搜索编辑系统环境变量,然后按下图 *** 作添加adb的环境变量路径
第二步:手机/平板电脑端配置(仅限于安卓11及以上系统)
系统限制原因:安卓11系统一改以往需要通过数据线开启调试模式的缺点,完全去数据线化。
步骤简要:
1.点击手机或平板的设置
2.找到版本号并多次点击版本号即可进入开发者模式
3.在通用设置中点击开发者选项,进入后勾选无线调试
4.点击无线调试,点击使用配对码配对设备,出现下图
第三步:电脑端配置
步骤简要:
1.打开电脑热点,并让手机/平板连接到热点
2. win键搜索cmd打开命令提示符
3.以第4节中手机端配置返回信息为例依次输入
3.1 adb pair 172.24.33.253:35297
3.2 Enter pairing code:052315
3.3 adb connect 172.24.33.253:35297
3.4 电脑与手机端配对完成
注意:电脑与手机的配对ip会永久保留,port(端口)在每次重新连接热点后会改变
第四步:python代码编写与可视化
安装库前需注意:
1.若已安装anaconda,建立新开虚拟环境 conda create -n ding python=3.9
2.通过conda activate ding激活虚拟环境
3.通过pip install/conda install 安装uiautomator2和weditor包
4.在已激活的虚拟环境输入python -m weditor出现下图
我们可以看到点击钉钉app后会显示app的各种信息如text,xpath。模拟点击钉钉app代码如下
import uiautomator2 as u2
import os
os.system('adb connect 172.24.33.253:35297') # 以上文建立的连接为例
d = u2.connect(ip)
if d.info["screenOn"] == False: #判断是否黑屏
os.system('adb shell input keyevent 26') # 唤醒屏幕
os.system('adb shell input keyevent 3') # 返回主页
d(text="钉钉").click() # 模拟点击
了解到text的用法后,xpath用法也依次类似,weditor也支持可复制的xpath路径
代码示例演示:
import uiautomator2 as u2
import os
import schedule
import time
def dingding_process(ip,port):
os.system('adb connect {}:{}'.format(ip,port)) # 调用cmd命令连接手机端
d = u2.connect(ip)
if d.info["screenOn"] == False: # 判断是否黑屏
os.system('adb shell input keyevent 26') # 唤醒屏幕
d(resourceId="com.android.systemui:id/lock_icon_container").click() # 屏幕解锁
os.system('adb shell input keyevent 3') # 返回主页
d(text="钉钉").click()
if d(text="暂不更新").exists: # 防止突发的更新提示干扰
d(text="暂不更新").click()
d.xpath('//*[@text="工作台"]').click()
d.xpath('//*[@resource-id="com.alibaba.android.rimet:id/menu_current_company"]').click()
time.sleep(1)
d.xpath('//*[@text="考勤群"]').click()
d.xpath('//*[@text="考勤打卡"]').click()
hour = time.strftime('%H') # 获取小时数据
week = time.strftime('%A') # 获取星期数据
time.sleep(2)
if '08' <= hour < '17':
d(text="上班打卡").click()
if week == 'Saturday' and'17' <= hour <= '21':
d(text="下班打卡").click()
elif '21' <= hour <= '22':
d(text="下班打卡").click()
time.sleep(10)
os.system('adb shell /system/bin/screencap -p /sdcard/screenshot.png') #保存到sd卡
os.system('adb pull /sdcard/screenshot.png screenshot.png') #保存到电脑
os.system('adb shell am force-stop com.alibaba.android.rimet') #关闭钉钉
os.system('adb shell input keyevent 26') #熄屏
def function_entrance(ip,port,data_time):
'''
:param ip: 设备ip地址
:param port: 端口地址,安卓11以上系统每次重新连接无线网时会变更
:param data_time: 设定打卡时间
'''
def job():
nonlocal task_flag
dingding_process(ip,port) # 每次连接需注意端口是否会变化
task_flag+=1
schedule.every().days.at(data_time).do(job)
task_flag=0
while True:
schedule.run_pending()
if task_flag==1:
break
function_entrance('172.24.33.253', '35297', '8:00')
Finally--研究结果
简单来说自动化测试 *** 作提供了相当程度的便捷,但也明显存在如下问题:
1.每次重新连接热点,端口会发生变化
2.需要电脑为移动端提供热点连接
3.稳定性不高,容易被莫名其妙的意外事件(如更新窗口卡住),结果就是程序报错--只能依靠多异常捕获处理机制解决。如加if xxx.exists或try-except-else语句处理异常
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)