程序员开发实例大全宝库

网站首页 > 编程文章 正文

速学编程:调用开源组件 FlaUI 快速编写自动化软件

zazugpt 2024-08-27 23:56:05 编程文章 20 ℃ 0 评论

FlaUI 功能强大,用法简洁。

请用几分钟看完本教程,定能轻松学会编写 Windows 自动化程序。

首先,我们使用小、轻、快的开发工具 aardio 创建空白工程:

双击打开 main.aardio ,输入下面的代码( 稍等下文会讲:怎么用 aardio 提供的 『FlaUI 探测器』自动生成这些代码 ):

import FlaUI.UIA3; 
var uia = FlaUI.UIA3.UIA3Automation();
 
//查找微信主窗口
var window = uia.FindWindow("WeChat.exe");

if(window){ 
    
    //前置窗口
    window.Focus();
    
    //查找文件传输助手的输入框
    var input  = window.FindFirstByXPath(`//Edit[@Name="文件传输助手"]`);
 
    //点击输入框
    mouse.click(input);
    
    //发送文本
    key.sendString("测试内容");
    
    //查找发送按钮
    var sendButton = window.FindFirstByXPath("//Button[@Name='发送(S)']"); 

    //点击发送按钮
    mouse.click(sendButton);
}

点击『运行』按键可以直接测试程序。

或者点击『发布』可以直接生成 EXE 文件。

在 aardio 中打开『工具 / 探测器 / FlaUI 探测器 』:

将上面的探针拖动到目标控件(或者勾选按 Ctrl 自动探测鼠标指向的控件),就可以自动生成 FlaUI 自动化操作控件的代码了。


FlaUI 官方提供了一个探测器 FlaUInspect,但是这个 FlaUInspect 有点问题:一个是不稳定窗口会突然闪退消失,鼠标位置探测的控件也不对(例如微信只能取到主窗口而不是内部控件),FlaUInspect 生成的 XPath 也是错的,FlaUI 在生成 XPath 时总是漏掉子级控件,所以最后得到的 XPath 总是无效的?。

好在 aardio 实现这些功能很快,所以我直接用 aardio 重新写了一个 FlaUI 探测器,其实别的功能一般用不上,我们主要是拿到正确的 X?Path 就可以了。

?下面我们简单解释一下工具生成的自动化代码。

先看查找窗口的几个参数:

var window = uia.FindWindow("EXE文件名","窗口类名","窗口标题")

这几个参数都是可选的,至少指定一个条件就行了,例如:

//查找微信窗口
var window = uia.FindWindow("WeChat.exe");
var window = uia.FindWindow("WeChat.exe","WeChatMainWndForPC");
var window = uia.FindWindow("WeChat.exe","WeChatMainWndForPC","微信");
var window = uia.FindWindow(  ,"WeChatMainWndForPC","微信");
var window = uia.FindWindow(  ,  , "微信");

以上写法都是可以的。

下面再看看如何使用 XPath 搜索要操作的目标控件,例如:

var input  = window.FindFirstByXPath(`/Pane/Edit`);

上面的 XPath 参数用斜杠分隔上下级表示控件的包含关系,参数 `/Pane/Edit` 指定在 Pane 控件内再去找 Edit 控件。这里的 Pane,Edit 都是指控件的类型( ControlType )。

XPath 最开始的单个斜杆表示根路径 —— 指向上面的 window 对象(主窗口)自身。

也可以两个斜杠表示模糊匹配任意深度的路径,例如:

window.FindFirstByXPath(`//Edit`);

这就表示只要匹配到 Edit 控件就可以,而不管他出现在哪一层级的控件内部。

我们还可以在 [] 指定一个序号,表示匹配第几个同层级同类型的兄弟控件。

例如匹配第 2 个 Pane 控件下面任意层级的 Edit 控件:

window.FindFirstByXPath(`/Pane[2]//Edit`);

我们还可以在[] 中指定控件的其他属性,例如:

window.FindFirstByXPath(`//Edit[@Name="文件传输助手"]`);

属性名前面要加一个 @ 符号。可以指定的属性有: @AutomationId,@Name,@ClassName,@HelpText 。

序号、属性可以连续写,例如:

window.FindFirstByXPath(`//Edit[2]][@Name="名称"][@AutomationId="ID"]`);

aardio 自带的 FlaUI 探测器会自动检查这些属性,例如:?如果探测的目标控件提供 AutomationId 属性,那么生成的 XPath 就会自动指定 AutomationId 属性。

其他关于 鼠标(mouse 库函数),键盘(key 库函数)用法,以及更多自动化操作请参考 aardio 自带范例:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表