Qt自动化混合其它自动化

在一个项目/脚本中同时调用多个技术的自动化API是非常常见的需求,这里以Qt自动化APIWindows自动化API两种技术的混合为例,在Windows操作系统中运行Qt应用时,常常会碰到需要在一个项目中同时操作Qt控件和Windows控件的情况。在CukeTest中调用多个技术的自动化API的方法非常简单,下面分别介绍手动编写脚本混合多种技术录制两种方式。

手动编写脚本

简单来说,调用自动化API前往往有如下操作:

  1. 引入相应技术自动化库中的模块(如leanpro.qt库中的QtAuto,或leanpro.win库中的WinAuto);
  2. 使用模块中的loadModel()方法加载模型文件,并保存为一个对象(通常为model)中。
  3. 调用model对象提供的操作API完成控件匹配和控件操作。

因此如果需要在一个脚本中同时调用不同技术的自动化API,只需要使用不同的自动化模块来加载模型文件,并保存到不同的对象中(比如保存为modelQtmodelWin),接着根据技术需求使用相应的对象即可。

模型文件允许被多次加载,因此不同技术的控件直接维护在同一个模型文件是完全没问题的。

操作步骤

假设目前有一个model.tmodel文件,里面同时维护了Windows控件Button_1和Qt控件Button_2,如下:

model.tmodel文件截图

那么如果要在脚本中分别点击两个控件,脚本就应该写成:

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()

上面的脚本中有两个注意点:

  1. 由于混合了Qt自动化,因此被测应用需要以Qt自动化的方式启动,即使用QtAuto.launchQtProcessAsync()方法来启动被测应用。
  2. 自动化技术必须与控件类型一致,如果将await modelQt.getButton("Button_2").click()改为await modelWin.getButton("Button_2").click()(使用其它技术的模型对象),那么会引发1014: Invalid object type错误。

当然如果认为上面的自动化脚本较复杂,可以使用混合录制的方式来自动生成两种自动化API的调用。

混合多种技术录制

CukeTest支持在录制过程中点击主界面的录制下拉框切换录制技术,通过这种方式可以非常轻松的生成多个技术的调用。

results matching ""

    No results matching ""