钉钉自动化打卡测试(python)

钉钉自动化打卡测试(python),第1张

第一步:安装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语句处理异常

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/793314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存