影刀RPA | 自定义日志打印装饰器

在某个类方法开始执行时就打印此方法的操作内容,原生的语句太长太冗余了,使用语法糖免去了注释和打印语句

Posted by Haauleon on August 18, 2023

一、背景

  原生的影刀 RPA 的打印语句太长了,每次打印就要调用一次,而且还需要额外增加注释和打印语句。



二、需求

  自定义装饰器,实现在某个类方法进行自动化操作前就打印该操作的内容,使用语法糖进行装饰,比较美观而且实用。



三、实现

  • 自定义装饰器
  • 语法糖装饰类方法
  • 最终执行效果


1、自定义装饰器

函数嵌套的方式实现装饰器 logger_print

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
import xbot_visual
from xbot import print, sleep
from .import package
from .package import variables as glv
import time


def logger_print(text):
    def decorator(func):
        def inner(self):
            xbot_visual.programing.log(type="info", text=text)
            return func(self)
        return inner
    return decorator



2、语法糖装饰类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
import xbot_visual
from . import package
from .package import variables as glv
import time
from . import decorator


class OrderPage:

    @decorator.logger_print("点击同步订单待审核按钮筛选列表")
    @decorator.check_windows
    def goto_check_list(self, u8_window):
        return xbot_visual.image.click(window_kind="screen", window=u8_window, template_images=[package.image_selector("u8-销售订单列表-同步订单待审核")], anchor_type="center", sudoku_part="MiddleCenter", offset_x="0", offset_y="0", clicks="click", button="left", keys="null", move_mouse=True, timeout="5", delay_after="15")



3、最终执行效果