MaaXYZ / MaaFramework

基于图像识别的自动化黑盒测试框架 | An automation black-box testing framework based on image recognition
GNU Lesser General Public License v3.0
1.09k stars 129 forks source link

由 Pipeline Json 直接支持 ExecAgent #246

Open MistEO opened 1 month ago

MistEO commented 1 month ago
{
    "TaskA": {
        "recognition": "Custom",
        "custom_recognition": "MyReco"
    }
}
resource
├─exec_agent
│  └─MyReco
├─image
├─model
│  └─ocr
└─pipeline
MistEO commented 1 month ago

另外我感觉 custom handler 就是应该跟着 resource 走的,或许接口也应该重构一下

MistEO commented 1 month ago

突然有了一个神奇的想法,给 ExecAgent 做一套 API,类似

MaaInitExecAgent(argc, argv);

当调用过这个初始化接口后,MaaSyncContextClick 等函数,实现会变成 print / input 相关操作,供 pipeline json 流程调用 而当没调用过这个初始化接口时,MaaSyncContextClick 等函数仍保持直接调用原先真正的 SyncContext 操作,这样开发者可以直接调试

也就是集成方的同一套代码,他自己可以直接运行去调试(实际是 dlopen MaaFramework 并调用 C API),也可以由 pipeline exec agent 调用(实际是 print / input)

实际的实现细节可能集成方更加无感,例如自动检测 argv,如果不是 pipeline 传进来的,MaaInitExecAgent 就什么也不做

MistEO commented 1 month ago

并且,我们可以提供大量的 Get / Set 接口,集成方可以实时获取任务中的信息,例如

hit_times = MaaGetTaskHitTimes("MyTask")
if hit_times < 3:
    MaaSyncContextClick(100, 100)
else:
   MaaSetTaskNextList(["TaskA, TaskB"])
MistEO commented 1 month ago

按照这样的思路,我们可以进一步在 Pipeline 中提供一些事件,如

{
    "TaskA": {
        "on_timeout": "MyTimeoutExec.py"
    }
}
resource
├─exec_agent
│  └─MyTimeoutExec.py
├─image
├─model
│  └─ocr
└─pipeline
# MyTimeoutExec.py
MaaSetTaskNextList(["TaskA, TaskB"])