Qt自动化混合其它自动化
在一个项目/脚本中同时调用多个技术的自动化API是非常常见的需求,这里以Qt自动化API和Windows自动化API两种技术的混合为例,在Windows操作系统中运行Qt应用时,常常会碰到需要在一个项目中同时操作Qt控件和Windows控件的情况。在CukeTest中调用多个技术的自动化API的方法非常简单,下面分别介绍手动编写脚本和混合多种技术录制两种方式。
手动编写脚本
简单来说,调用自动化API前往往有如下操作:
- 引入相应技术自动化库中的模块(如
leanpro.qt
库中的QtAuto
,或leanpro.win
库中的WinAuto
); - 使用模块中的
loadModel()
方法加载模型文件,并保存为一个对象(通常为model
)中。 - 调用
model
对象提供的操作API完成控件匹配和控件操作。
因此如果需要在一个脚本中同时调用不同技术的自动化API,只需要使用不同的自动化模块来加载模型文件,并保存到不同的对象中(比如保存为modelQt
和modelWin
),接着根据技术需求使用相应的对象即可。
模型文件允许被多次加载,因此不同技术的控件直接维护在同一个模型文件是完全没问题的。
操作步骤
假设目前有一个model.tmodel
文件,里面同时维护了Windows控件Button_1
和Qt控件Button_2
,如下:
那么如果要在脚本中分别点击两个控件,脚本就应该写成:
JavaScript
Python
const { QtAuto } = require("leanpro.qt");
const { WinAuto } = require("leanpro.win");
(async () => {
let modelQt = QtAuto.loadModel(__dirname + "/model.tmodel");
let modelWin = WinAuto.loadModel(__dirname + "/model.tmodel");
await QtAuto.launchQtProcessAsync("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe");
await modelWin.getButton("Button_1").click()
await modelQt.getButton("Button_2").click()
await modelQt.getApplication("basiclayouts").quit();
})();
from leanproAuto import RunSettings
from leanproAuto import WinAuto, QtAuto
modelQt = QtAuto.loadModel("./model1.tmodel")
modelWin = WinAuto.loadModel("./model1.tmodel")
QtAuto.launchQtProcessAsync("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe")
modelWin.getButton("Button_1").click()
modelQt.getButton("Button_2").click()
modelQt.getApplication("basiclayouts").quit()
上面的脚本中有两个注意点:
- 由于混合了Qt自动化,因此被测应用需要以Qt自动化的方式启动,即使用
QtAuto.launchQtProcessAsync()
方法来启动被测应用。 - 自动化技术必须与控件类型一致,如果将
await modelQt.getButton("Button_2").click()
改为await modelWin.getButton("Button_2").click()
(使用其它技术的模型对象),那么会引发1014: Invalid object type
错误。
当然如果认为上面的自动化脚本较复杂,可以使用混合录制的方式来自动生成两种自动化API的调用。
混合多种技术录制
CukeTest支持在录制过程中点击主界面的录制下拉框切换录制技术,通过这种方式可以非常轻松的生成多个技术的调用。