Qtitan组件

Qtitan 是一个基于 Qt 框架的第三方 GUI 组件库,提供了多种功能的组件,主要包括:

  • QtitanRibbon:提供类似于 Microsoft Office 的功能区界面,支持多种主题和样式。
  • QtitanDataGrid:用于显示和编辑大数据量的表格,支持排序、过滤和分组等功能。
  • QtitanChart:提供了多种类型的图表控件,可以用于数据可视化。
  • QtitanDocking:提供灵活的停靠窗口管理功能,适用于复杂的多窗口应用。

控件识别

在使用 CukeTest 进行测试录制或侦测时,Qtitan 控件(如 Qtitan::RibbonPageQtitan::RibbonGroup)会自动将用控件的 meta.title 信息作为标识属性,从而提高控件的识别准确性,使自动化测试更可靠。

侦测Qtitan控件

如果需要在识别过程中使用 meta 中的其他信息,可以在浏览控件树中找到对应的控件,在控件的 meta 属性中选择所需的特定属性即可。

手动添加meta属性

控件操作方法

CukeTest 提供了一系列标准的 Qt 操作方法,支持对 Qtitan 控件进行基本的操作。这些方法的应用范围广泛,可以满足大多数自动化测试的需求。常见的操作方法包括:

  • click():模拟用户点击控件的操作。
  • pressKeys():向控件发送按键事件,如输入文本或执行快捷键操作。
  • exists():检查指定的控件是否存在于当前的用户界面中。
  • takeScreenshot():用于截取控件的屏幕截图。
  • checkProperty():用于验证控件的某个属性值是否符合预期。
  • allProperties():获取控件的所有属性及其当前值,以便进行进一步分析或验证。

对于一些无法直接识别其子项的容器组件,可以使用 invoke() 方法。通过该方法,用户可以调用组件内部的函数,执行一些更复杂的操作。

注意:对Qtitan组件使用 invoke() 方法时,需要加载对应版本的 Qtitan 插件。CukeTest 的 Qtitan 插件对 Qtitan 控件的操作方法进行了扩展。

例如,对于 Qtitan::Grid 组件中,虽然单元格不能直接作为独立控件进行操作,但通过父控件的 invoke() 方法,也可以获取和操作单元格中的数据。

以下示例展示了如何使用 invoke() 方法获取 Qtitan::Grid 中第 2 行第 5 列单元格的值:

JavaScript
Python
await model.getGeneric("Qtitan::Grid").invoke("view.model.data", [1,4]);
model.getGeneric("Qtitan::Grid").invoke("view.model.data", [1, 4])

通过invoke获取数据

示例

下面是一些实际应用中的代码示例,演示了如何对 Qtitan 组件进行自动化测试操作。

JavaScript
Python
const { RunSettings, Util } = require("leanpro.common");
const { QtAuto } = require("leanpro.qt");
(async () => {
    await RunSettings.set({ slowMo: 100, reportSteps: true });

    let modelQt = QtAuto.loadModel(__dirname + "/Grid_TreeView.tmodel");

    await QtAuto.launchQtProcessAsync("C:\\Grid_TreeView.exe")
    
    await modelQt.getApplication("Grid_TreeView").exists(10)
    
    let val = await modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.data2', ["[1, 1]"]);
    console.log(`单元格[1, 1]的数据是: ${val}`)

    // 行数
    let rowCount = await modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.rowCount');
    console.log(`行数: ${rowCount}`);

    // 列数
    let columnCount = await modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.columnCount');
    console.log(`列数: ${columnCount}`);

    // 折叠所有行
    for (let i = 0; i < rowCount; i++) {
        await modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.collapse', [i]);
        Util.delay(300);
    }

    // 展开所有行
    for (let i = 0; i < rowCount; i++) {
        await modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.expand', [i]);
        if (i === rowCount - 1) {
            await modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.scrollToIndex', [i, 0]);
        }
        Util.delay(200);
    }

    // 获取行列数据
    for (let i = 0; i < rowCount; i++) {
        for (let j = 0; j < columnCount; j++) {
            val = await modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.data', [i, j]);
            console.log(`${i}, 列${j} 的数据是: ${val}`);
        }
        console.log();
    }
})()
import os
from leanproAuto import RunSettings, QtAuto, Util

def test_Grid_TreeView():

    RunSettings.set({"slowMo": 1000, "reportSteps": True})

    modelQt = QtAuto.loadModel(os.path.dirname(os.path.realpath(__file__)) + "/Grid_TreeView.tmodel")

    # Launch application file"Grid_TreeView"
    QtAuto.launchQtProcessAsync("C:\\Grid_TreeView.exe")
    
    #Wait for Qt application "Grid_TreeView"
    modelQt.getApplication("Grid_TreeView").exists(10)
    
    #获取单元格[1, 1]的数据
    val = modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.data2', ["[1, 1]"])
    print(f"单元格[1, 1]的数据是: {val}")

    #行数
    rowCount = modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.rowCount')
    print(f"行数: {rowCount}")
    
    #列数
    columnCount = modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.columnCount')
    print(f"列数: {columnCount}")

    # 折叠所有行
    for i in range(rowCount):
        modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.collapse', [i])
        Util.delay(300)

    # 展开所有行
    for i in range(rowCount):
        modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.expand', [i])
        modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.scrollToIndex', [i, 0])
        Util.delay(200)

    #获取行列数据
    for i in range(rowCount):
        for j in range(columnCount):
            val = modelQt.getGeneric("Qtitan::TreeGrid").invoke('view.model.data', [i, j])
            print(f"行 {i}, 列 {j} 的数据是: {val}")
        print()

if __name__ == "__main__":
    test_Grid_TreeView()

results matching ""

    No results matching ""