基本类型对象

在上一篇中我们了解了CukeTest中的容器类和控件基类,接下来就是针对各种不同的控件类的API介绍了。本篇文章中将介绍以下几个基础的控件类:

而相对复杂的控件类有以下几个,由于包含的方法比较多,因此放到了其它文档中,请按照需求点击链接跳转:

以及以上三个复杂控件的基类自定义视图ItemView控件,针对Qt应用中从AbstractView抽象视图派生出来的自定义组件,介绍如下:

由于各个控件类因为是继承自IQtControl,因此每个控件类都拥有通用控件的所有操作和属性方法。以CheckBox控件类举例:

CheckBox控件有一个操作方法——check()用于设置是勾选还是清除勾选; 一个属性方法checked()用于判断CheckBox的勾选状态。true表示勾选,false代表未勾选:

JavaScript
Python
export interface IQCheckBox extends IQtControl {
    toggleCheck(checkState: boolean): Promise<void>
    checkState(): Promise<boolean>
}
class QCheckBox(QtControl):
	def checkState() -> bool
	def toggleCheck(checkState: bool) -> None
但实际上CheckBox除了这两个方法,还从IQtControl基类继承了所有的方法,所以CheckBox的方法实际上应该包含了基类的方法:
JavaScript
export interface IQCheckBox extends IQtControl {
    toggleCheck(checkState: boolean): Promise<void>
    checkState(): Promise<boolean>
    // 来自IQtControl  
    click(x?: number, y?: number, mousekey?: number): Promise<void>;
    dblClick(x?: number, y?: number, mousekey?: number): Promise<void>;
    moveMouse(x?: number, y?: number): Promise<void>;
    wheel(value: number): Promise<void>;
    takeScreenshot():Promise<string>;

    rect(): Promise<Rect> 
}
如果一个对象不包含任何操作和属性方法,代表它只适用其基类——也就是IQtControlIQtContainer中的操作和属性方法而没有自己特有的,比如Button控件

基础控件类介绍

按钮控件: Button

针对普通的按钮控件,模型管理器提供了Button对象类型。

JavaScript
Python
export interface IQButton extends IQtControl {
    text(): Promise<string>;
}
class QButton(QtControl):
	def text() -> str

text(): Promise<string>

获取按钮上的内容。

  • 返回值: Promise<string>类型,需要使用await关键字取出其中的结果。

校验获取按钮上的内容,假设当前按钮控件为Button

JavaScript
Python
let text = await model.getButton("Button").text();
assert.equal(text,'Button');
text = model.getButton("Button").text()
assert text == 'Button'


窗口控件: Window

针对应用窗口控件,模型管理器提供了Window对象类型。

JavaScript
Python
export interface IQWindow extends IQtControl {
    activate(): Promise<void>;
    close(): Promise<void>;
    maximize(): Promise<void>;
    minimize(): Promise<void>;
    restore(): Promise<void>;
}
class QWindow(QtControl):
	def activate() -> None
	def close() -> None
	def maximize() -> None
	def minimize() -> None
	def restore() -> None

activate(): Promise<void>

激活目标窗口,使目标窗口出现在桌面最上层,避免被其它窗口遮盖。

  • 返回值: 不返回任何值的异步方法。

    由于CukeTest与Qt的桌面操作自动化是通过通信实现的,因此自动化操作不会因为Qt窗口被遮住而失效。

close(): Promise<void>

关闭目标窗口。

  • 返回值: 不返回任何值的异步方法。

maximize(): Promise<void>

最大化目标窗口。

  • 返回值: 不返回任何值的异步方法。

minimize(): Promise<void>

最小化目标窗口。

  • 返回值: 不返回任何值的异步方法。

restore(): Promise<void>

恢复目标窗口。当目标最小化以后可以使用这个方法恢复为正常状态。

  • 返回值: 不返回任何值的异步方法。

标签控件: Label

针对用于标示其它控件或显示固定内容的标签控件Label,没有操作方法,只有一个自己的属性方法:

JavaScript
Python
export interface IQLabel extends IQtControl {
    text(): Promise<string>
}
class QLabel(QtControl):
	def text() -> str

text(): Promise<string>

获得标签当前的值。

  • 返回值: Promise<string>类型,需要使用await关键字取出其中的结果。

校验获取标签当前的值,假设当前标签控件为Line_1

JavaScript
Python
let text = await model.getLabel("Line_1:").text();
assert.equal(text,'Line_1')
text = model.getLabel("Line_1:").text()
assert text = 'Line_1'


输入框控件: Edit

针对用于接收用户输入的输入框控件Edit,没有区分单行输入框与多行输入框。提供的操作方法和属性方法都是针对输入框中的值。

JavaScript
Python
export interface IQEdit extends IQtControl {
    set(value: String): Promise<void>;
    clearAll(): Promise<void>;
    value(): Promise<string>;
}
class QEdit(QtControl):
	def value() -> str
	def set(value: str) -> None
	def clearAll() -> None

set(value): Promise<void>

设置输入框中的值。将目标输入框中的值替换为传入的字符串。

  • value: String类型,期望写入到输入框的值;
  • 返回值: 不返回任何值的异步方法。

clearAll(): Promise<void>

清除输入框中的值。

  • 返回值: 不返回任何值的异步方法。

value(): Promise<string>

获取当前输入框中的值并返回。

  • 返回值: Promise<string>类型,需要使用await关键字取出其中的结果。

校验获取输入框中的值,假设当前输入框控件为Edit

JavaScript
Python
let actual = await modelQt.getEdit("Edit").value();
let expected = 'Hello World!';
assert.equal(actual,expected);
actual = modelQt.getEdit("Edit").value()
expected = 'Hello World!'
assert actual == expected


单选按钮控件: RadioButton

针对单选按钮的RadioButton控件,按照使用逻辑提供了选中和获取选中状态的方法。

JavaScript
Python
export interface IQRadioButton extends IQtControl {
    check(): Promise<void>;
    checked(): Promise<boolean>;
}
class QRadioButton(QtControl):
	def check() -> None
	def checked() -> bool

check(): Promise<void>

选中目标单选按钮。

  • 返回值: 不返回任何值的异步方法。

checked(): Promise<boolean>

获取目标单选按钮的选中状态,true代表已选中,false代表未选中。

  • 返回值: Promise<boolean>类型,代表目标复选框是否选中。需要使用await关键字取出其中的结果。

复选框控件: CheckBox

针对复选框控件的CheckBox控件,能够直接设定选中状态,当然也可以获取状态。

JavaScript
Python
export interface IQCheckBox extends IQtControl {
    checkState(): Promise<boolean | 'partial'>
    toggleCheck(checkState: boolean | 'partial'): Promise<void>
}
class QCheckBox(QtControl):
	def checkState() -> bool
	def toggleCheck(checkState: bool) -> None

toggleCheck(checkState): Promise<void>

设置目标复选框的选中状态。

  • checkState: Boolean类型,true代表选中复选框,false代表取消选中目标复选框,patial代表部分选中,通常不使用。
  • 返回值: 不返回任何值的异步方法。

checkState(): Promise<boolean | 'partial'>

获取目标单选按钮的选中状态,true代表已选中,false代表未选中。

  • 返回值: Promise<boolean | 'partial'>类型,代表目标复选框是否选中。需要使用await关键字取出其中的结果。

组合框: ComboBox

针对带下拉框的一类特殊输入框的ComboBox控件,提供了选择指定下拉选项的操作方法。

JavaScript
Python
export interface IQComboBox extends IQtControl {
    open(): Promise<void>;
    select(nameOrIndex: String | number): Promise<void>;

    selectedIndex(): Promise<number>;
    selectedName(): Promise<string>;
    items(): Promise<string[]>;
}
class QComboBox(QtControl):
	def open() -> None
	def select(nameOrIndex: Union[str, int]) -> None
	def selectedIndex() -> int
	def selectedName() -> str
	def items() -> List[str]

open(): Promise<void>

展开下拉框,可以视作触发了目标右侧的按钮。

  • 返回值: 不返回任何值的异步方法。

select(nameOrIndex): Promise<void>

  • nameOrIndex: numberString类型。如果为数字,则会选中下拉框中相应索引位置的选项;如果为字符串,则会选择下拉框中相应名称的选项。
  • 返回值: 不返回任何值的异步方法。

selectedIndex(): Promise<number>

获取当前选中的值在下拉框中的位置。

  • 返回值: Promise<number>类型,代表当前值在下拉框中的位置。需要使用await关键字取出其中的结果。

selectedItem(): Promise<string>

获取当前选中的值。

  • 返回值: Promise<string>类型,代表当前选中的值。需要使用await关键字取出其中的结果。

itemsToSelect(): Promise<string[]>

获取目标组合框中所有可选选项的名称。

  • 返回值: Promise<string[]>类型,即字符串数组,获取目标组合框中所有可选选项的名称。需要使用await关键字取出其中的结果。

选值框: SpinBox

针对应用中带上下箭头的选值框SpinBox控件,为其提供了触发其增加/减少值的操作API。

SpinBox控件继承自Edit控件,也就是说它除了以下的方法外,还能够使用Edit控件的方法。这点可以从类型文件中看出来。

该控件的类型定义如下:

JavaScript
Python
export interface IQSpinBox extends IQEdit {
    increment(): Promise<void>;
    decrement(): Promise<void>;
}
class QSpinBox(QEdit):
	def increment() -> None
	def decrement() -> None

increment(): Promise<void>

使取值框的值增加一个单位,单位大小取决于应用中的设置。可以理解为触发了一次取值框中的上箭头。

  • 返回值: 不返回任何值的异步方法。

decrement(): Promise<void>

使取值框的值减少一个单位,单位大小取决于应用中的设置。可以理解为触发了一次取值框中的下箭头。

  • 返回值: 不返回任何值的异步方法。

应用控件: Application

针对应用本身的一个控件,通常作为最顶层控件存在,提供了获取应用属性和操作应用的方法。

JavaScript
Python
export interface IQApplication extends IQtControl {
    launch(waitSeconds?: number): Promise<IQApplication>
    launch(appPath?: string, waitSeconds?: number): Promise<IQApplication>
    quit(): Promise<void>;
    exists(seconds?: number): Promise<boolean>
    appInfo(): Promise<AppInfo>;
    pid(): Promise<number>;
    topControls(): Promise<IQtControl[]>;
    findAll(): Promise<IQtControl[]>;
}
export interface AppInfo {
    appName: string,
    appPath: string,
    appVersion: string,
    pid: number,
}
class QApplication(QtContainer):
    def launch(appPath=None, waitSeconds=10): QApplication
	def quit() -> None
	def exists(seconds=5) -> bool
	def appInfo() -> "AppInfo"
	def pid() -> int
	def topControls() -> List[QtControl]

class AppInfo():
	appName: str
	appPath: str
	appVersion: str
	pid: int

appInfo(): Promise<AppInfo>

获取应用自身的信息,比如应用名称、版本、路径等等信息。

  • 返回值: AppInfo类型,包含了应用名称、路径、版本和进程号的对象。

pid(): Promise<number>

获取应用的进程号。

  • 返回值: number类型,进程编号。

launch(appPath?: string, waitSeconds?: number): Promise<IQApplication>

启动应用,如果不传入appPath,会自动的使用Application对象在模型中的appPath属性。会自动的等待应用进程启动后再完成,这个等待的最长时间由waitSeconds参数控制,默认为10秒,表示如果超过10秒仍未检测到应用进程,则会抛错。

  • appPath:(可选)应用路径,如果不填写,默认使用对象在模型中的appPath属性
  • waitSeconds: (可选)等待应用进程出现的超时时间,默认为为10秒。
  • 返回值: Promise<Application>对象,异步的返回被启动的应用对象。

假设模型model1.tmodel中存在Application节点,名为basiclayoutsappPath属性为C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe,那么以下两种写法等效:

JavaScript
Python
const { QtAuto } = require("leanpro.qt");
(async () => {
    let modelQt = QtAuto.loadModel("model1.tmodel");

    await QtAuto.launchQtProcessAsync("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe");
    await modelQt.getApplication("basiclayouts").exists(10);

    // 上面两行与下面这行的调用效果一致:
    await modelQt.getApplication("basiclayouts").launch();
})()
from leanproAuto import QtAuto
modelQt = QtAuto.loadModel("model1.tmodel")

QtAuto.launchQtProcessAsync("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe")
modelQt.getApplication("basiclayouts").exists(10)
# 上面两行与下面这行的调用效果一致:
modelQt.getApplication("basiclayouts").launch()

quit(): Promise<void>

退出应用。会关闭应用以及属于应用的所有子窗口。

  • 返回值: 不返回任何值的异步方法。

findAll(): Promise<Control[]>

遍历所有同名进程

  • 返回值: 所有匹配应用对象,且允许在返回的对象上继续调用模型节点。
    JavaScript
    const apps = await modelQt.getApplication("standarddialogs").findAll()
    // 定位PID最小的进程
    let appsPID = await Promise.all(apps.map(async (app) => app.pid()))
    const minimalPID = appsPID.slice().sort()[0]
    const app = apps[appsPID.indexOf(minimalPID)]
    const currentAppPID = await app.pid()
    assert.equal(currentAppPID, minimalPID);
    // 遍历操作所有进程
    // 注意:允许在返回的对象上继续调用模型节点
    for (let app of apps) {
        await app.getWindow("Standard_Dialogs").activate()
        //点击 "QInputDialog::getInt()"
        await app.getButton("QInputDialog::getInt()").click();
        await app.getButton("OK").click()
        //点击 "QInputDialog::getMultiLineText"
        await app.getButton("QInputDialog::getMultiLineText").click();
        await app.getButton("OK").click()
        await app.getButton("QInputDialog::getMultiLineText").click();
    }
    for (let app of apps) {
        await app.quit()
    }

针对应用中的工具栏操作的MenuBar控件,以及工具栏中的按钮——MenuBarItem控件,通常只用于点击或打开菜单按钮展开菜单栏。如果需要直接操作菜单选项,建议阅读菜单控件[Menu&MenuItem]的invoke()方法。

JavaScript
Python
export interface IQMenuBar extends IQtControl {
    open(itemName: String): Promise<void>;
    items(): Promise<IQMenuBarItem>;
}
export interface IQMenuBarItem extends IQtControl {
    open(): Promise<void>;
    text(): Promise<string>;
}
class QMenuBar(QtControl):
	def open(itemName: str) -> None
	def items() -> List[QMenuBarItem]
class QMenuBarItem(QtControl):
	def itemIndex() -> int
	def open(itemName: str) -> None
	def text() -> str
下面是菜单栏控件MenuBar提供的方法:

open(itemName: String): Promise<void>

打开目标菜单栏选项,传入目标菜单栏选项的名称。

如果是MenuBarItem上的open()方法则不需要传入任何参数。

  • itemName: string类型,目标菜单栏选项的名称。
  • 返回值: 不返回任何值的异步方法。

items(): Promise<IQMenuBarItem[]>

获取菜单栏中的所有选项的控件对象。

  • 返回值: IQMenuBarItem[]类型,由所菜单栏选项控件对象组成的数组。

下面是菜单栏选项控件MenuBarItem提供的方法:

open(): Promise<void>

打开菜单项。

  • 返回值: 不返回任何值的异步方法。

text(): Promise<string>

获取菜单项文本。

  • 返回值: string类型,返回菜单项的文本。

校验获取菜单栏下的菜单项File控件的文本。

JavaScript
Python
let text = await model.getMenuItem("File").text();
assert.equal(text,'File');
text = model.getMenuItem("File").text()
assert text == 'File'


针对应用中的菜单和菜单选项的控件,MenuMenuItem,操作菜单的选择、展开和隐藏。
关于菜单控件的定义如下,但最常用和关键的是invoke()操作方法,在后面进行介绍:

JavaScript
Python
export interface IQMenu extends IQtControl {
    invoke(itemName: string): Promise<void>;
    show(): Promise<void>;
    hide(): Promise<void>;
    itemNames(): Promise<string[]>;
    items(): Promise<<MenuItem[]>>;
}

export interface IQMenuItem extends IQtControl {
    invoke(): Promise<void>;
    toggleCheck(value: boolean): Promise<void>;
    checked(): Promise<boolean>;
    checkable(): Promise<boolean>;
    text(): Promise<string>;
    itemIndex(): Promise<number>;
    hover(): Promise<void>;
}
class QMenu(QtControl):
	def invoke(itemName: str) -> None
	def show() -> None
	def hide() -> None
	def itemNames() -> List[str]
	def items() -> List[QMenuItem]
class QMenuItem(QtControl):
	def invoke() -> None
	def toggleCheck(value: bool) -> None
	def checked() -> bool
	def checkable() -> bool
	def text() -> str
	def itemIndex() -> int
	def hover() -> None

invoke(itemName): Promise<void>

直接触发目标菜单中的菜单项。在Menu控件中需要传入目标菜单项的名称;而在MenuItem控件中,不需要传入任何参数。

此方法不会展开菜单,而是通过通信直接触发目标菜单项功能,因此在用户角度不会观察到菜单的变化。

  • itemName: 目标菜单项的名称,需要为目标菜单的一级菜单项;
  • 返回值: 不返回任何值的异步方法。

show(): Promise<void>

展开目标菜单。

hide(): Promise<void>

隐藏目标菜单。

itemNames(): Promise<string[]>

获取目标菜单中的所有菜单项名称。

  • 返回值: string[]类型,返回所有菜单项名称组成的字符串数组。

获取目标菜单中的所有菜单项对象。

  • 返回值: MenuItem[]类型,返回所有菜单项对象组成的对象数组。

以下是MenuItem对象的方法。

invoke(): Promise<void>

直接触发目标菜单项。

此方法不会展开菜单,而是通过通信直接触发目标菜单项功能,因此在用户角度不会观察到菜单的变化。

  • 返回值: 不返回任何值的异步方法。

checkable(): Promise<boolean>

获取菜单项是否可以勾选。一些菜单项是通过点击来切换勾选状态,此方法用于获取菜单项的可勾选情况。

  • 返回值: 不返回任何值的异步方法。

toggleCheck(value: boolean): Promise<void>

改变菜单项勾选状态。一些菜单项是通过点击来切换勾选状态,此方法用于修改勾选状态。需要checkable()方法返回true的菜单项才能用此方法。

  • value: boolean类型,表示勾选状态。
  • 返回值: 不返回任何值的异步方法。

checked(): Promise<boolean>

获取菜单项的勾选状态。

  • 返回值: boolean类型,表示勾选状态。

text(): Promise<string>

获取菜单项的文本内容。

  • 返回值: string类型,菜单项文本。

点击菜单控件Menu,校验获取菜单项About_Qt控件的文本内容。

JavaScript
Python
model.getMenu("Help").click();
let text = await model.getMenuItem("About_Qt").text();
assert.equal(text,'About_Qt');
model.getMenu("Help").click()
text = model.getMenuItem("About_Qt").text()
assert text == 'About_Qt'

itemIndex(): Promise<number>

获取菜单项的index,即标识属性中的itemIndex值。

  • 返回值: number类型,菜单项index。

hover(): Promise<void>

使鼠标悬停在目标菜单项上,可以用于展开子菜单项。

  • 返回值: 不返回任何值的异步方法。

进度条控件: ProgressBar

针对应用中的进度条所支持的控件,可以通过调用value()方法取得进度条的值。

由于进度条的值通常是受控于内部逻辑或者其它控件,因此不支持直接修改其值。

形状如下:
进度条

类型文件如下:

JavaScript
Python
export interface IQProgressBar extends IQtControl {
    value(): Promise<number>;
}
class QProgressBar(QtControl):
	def value() -> int

value(): Promise<number>

获取当前进度条中的值并返回。因为返回结果是数字,因此会省略百分比%号。

  • 返回值: Promise<number>类型,需要使用await关键字取出其中的结果。

旋钮控件: Dial

针对用于手动调节值的旋钮控件,功能与滑动条控件类似,是Qt为了适配触屏应用推出的控件。 形状如下:
旋钮Dial

JavaScript
Python
export interface IQDial extends IQtControl {
    value(): Promise<number>;
    setValue(value: number): Promise<void>;
}
class QDial(QtControl):
	def value() -> int
	def setValue(value: int) -> None

value(): Promise<number>

获取当前旋钮的值并返回。

  • 返回值: Promise<number>类型,需要使用await关键字取出其中的结果。

setValue(value): Promise<void>

设置旋钮的值,将旋钮旋至指定值的位置,但不会超出最大值。

  • value: number类型,将旋钮旋至指定值的位置;
  • 返回值: 不返回任何值的异步方法。

滑动条控件: Slider

针对用于接收用户设定的值的滑动条控件。

JavaScript
Python
export interface IQSlider extends IQtControl {
    value(): Promise<number>;
    setValue(value: number): Promise<void>;
}
class QSlider(QtControl):
	def value() -> int
	def setValue(value: int) -> None

value(): Promise<number>

获取当前滑动条的值并返回。

  • 返回值: Promise<number>类型,需要使用await关键字取出其中的结果。

setValue(value): Promise<void>

设置滑动条的值,将滑块拖拽至指定值的位置,但不会超出最大值。

  • value: number类型,将滑块拖拽至指定值的位置;
  • 返回值: 不返回任何值的异步方法。

滚动区域控件: ScrollArea

作为一种容器,当容器中内容较多时,可以进行滚动浏览。由于有时候该控件会设置为不显示滚动条,因此另外支持了一个用于滚动的方法——ensureVisible()方法进行滚动。

JavaScript
Python
export interface IQScrollArea extends IQtControl {
    ensureVisible(x:number, y: number);
}
class QScrollArea(QtControl):
	def ensureVisible(x: int, y: int) -> None

ensureVisible(x, y): Promise<void>

滚动到目标位置(相对滚动区域左上角顶点而言)。

  • x: number类型,水平像素数;
  • y: number类型,垂直像素数;
  • 返回值: 不返回任何值的异步方法。

标签栏控件和标签页控件: TabBar & Tab & TabItem

针对应用中的标签页的控件,TabTabItem,进行标签页的切换。同时提供了控制标签页所在栏——标签栏控件TabBar
关于标签栏控件的定义如下:

JavaScript
Python
export interface IQTabBar extends IQtControl {
    activate(itemNameOrIndex: string | number): Promise<void>;
    closeTab(itemNameOrIndex: string | number): Promise<void>;

    count(): Promise<string[]>;
    activeIndex(): Promise<number>;
    activeName(): Promise<string>;
    tabNames(): Promise<string[]>;
}

export interface IQTab extends IQtControl {
    getItem(itemNameOrIndex: string | number): IQTabItem;
    activate(itemNameOrIndex: string | number): Promise<void>;
    closeTab(itemNameOrIndex: string | number): Promise<void>;

    activeName(): Promise<string>;
    activeIndex(): Promise<number>;
    count(): Promise<string[]>;
    items(): Promise<string[]>;
}

export interface IQTabItem extends IQtControl {
    activate(): Promise<void>;
    closeTab(): Promise<void>;

    text(): Promise<string>;
    itemIndex(): Promise<number>;
}
class QTabBar(QtControl):
	def activate(itemNameOrIndex: Union[str, int]) -> None
	def count() -> List[str]
	def activeIndex() -> int
	def activeName() -> str
	def tabNames() -> List[str]
	def closeTab(itemNameOrIndex: Union[str, int]) -> None

class QTab(QTabBar):
	def getItem(itemNameOrIndex: Union[str, int]) -> "QTabItem"
    
class QTabItem(QtControl):
	def activate() -> None
	def text() -> str
	def itemIndex() -> int
	def closeTab() -> None

getItem(itemNameOrIndex): IQTabItem

获取指定标签页的自动化对象,传入标签页的索引值或标题。

  • itemNameOrIndex: numberstring类型,目标标签页的索引值或标签页标题。
  • 返回值: TabItem类型,同步的返回一个TabItem类型的操作对象。

activate(itemNameOrIndex): Promise<void>

激活目标标签页,传入标签页的索引值或标题。

如果是TabItem上的activate()方法则不需要传入任何参数。

  • itemNameOrIndex: numberstring类型,目标标签页的索引值或标签页标题。
  • 返回值: 不返回任何值的异步方法。

closeTab(itemNameOrIndex): Promise<void>

关闭目标标签页,传入标签页的索引值或标题。

如果是TabItem上的closeTab()方法则不需要传入任何参数。

  • itemNameOrIndex: numberstring类型,目标标签页的索引值或标签页标题。
  • 返回值: 不返回任何值的异步方法。

activateIndex(): Promise<number>

获取当前界面中被激活的标签索引值。

  • 返回值: number类型,标签页索引值。

activateName(): Promise<string>

获取当前界面中被激活的标签名称。

  • 返回值: string类型,标签页的名称。

count(): Promise<number>

获取标签栏中的标签页数量。

  • 返回值: number类型,标签页的数量。

items(): Promise<string[]>

获取标签栏中的标签页的名称。

  • 返回值: string[]类型,由所有标签页标题组成的字符串数组。

以下是TabItem对象的方法。

activate(): Promise<void>

激活标签页。

  • 返回值: 不返回任何值的异步方法。

closeTab(): Promise<void>

关闭标签页。

  • 返回值: 不返回任何值的异步方法。

text(): Promise<string>

获取标签页标题。

  • 返回值: string类型,返回标签页的标题。

itemIndex(): Promise<number>

获取标签页在整个标签栏中的次序。

  • 返回值: number类型,返回标签页的索引值。

图元控件及视图: GraphicsView & GraphicsItem

属于一种通过绘制产生的图形,即所谓的图元控件,类似SVG(可缩放矢量图形)的概念。CukeTest将这类图元抽象为一种图元控件并进行识别和操作,并专门提供了几个识别属性用于定位图元控件:

  1. position: 目标在画布中的位置;
  2. bounding: 目标图元的碰撞箱,或者可以理解为轮廓信息;
  3. objectName: (可选)目标图元的名称,由于图元不一定都包含objectName,因此是可选的识别属性。

JavaScript
export interface GraphicsView extends IQtControl {
    sceneRect(): Promise<Rect>
    clickScene(sceneX: number, sceneY: number): Promise<void>;
    moveToScene(sceneX: number, sceneY: number): Promise<void>;
}
export interface GraphicsItem extends IQtControl {
    scrollIntoView(): Promise<void>;
    bound(): Promise<boolean>;
    position(): Promise<Point>;
}


下面是图元视图控件提供的方法,主要提供了部分以图元视图的画布作为目标的操作方法:

sceneRect(): Promise<Rect>

获取画布尺寸。

  • 返回值: 异步的返回Rect对象用于描述画布的尺寸信息。

clickScene(sceneX, sceneY, mouseKey): Promise<void>

点击目标画布位置,如果目标位置不在可见区域内则会移动画布使该点可见。传入的参数均代表画布坐标。

  • sceneX: 目标点在画布中的水平坐标。
  • sceneY: 目标点在画布中的垂直坐标。
  • mouseKey: (可选)number类型,点击时使用的鼠标键,1为左键,2为右键;缺省值为1;
  • 返回值: 不返回任何值的异步方法。

moveToScene(sceneX, sceneY): Promise<void>

将当前画布视角切换到目标点可见的位置。如果目标点已经可见,则不会有任何效果。

  • sceneX: 目标点在画布中的水平坐标。
  • sceneY: 目标点在画布中的垂直坐标。
  • 返回值: 不返回任何值的异步方法。

下面是图元控件提供的方法:

scrollIntoView(): Promise<void>

将当前画布视角切换到当前图元可见的位置。

  • 返回值: 不返回任何值的异步方法。

bound(): Promise<number[]>

获取当前图元的碰撞矩形(BoundingRect)属性。

  • 返回值:Promise<number>类型,以数组形式返回图元的碰撞矩形(BoundingRect)。

position(): Promise<Point>

获取当前图元在画布中的绝对位置。

  • 返回值: 异步的返回{x: number, y:number}对象,即包含水平和垂直位置信息的对象。

从类型文件中可以看到,除了通用的操作方法外,CukeTest不为图元控件提供丰富的属性方法,如果需要获取图元控件的详细属性,可以使用allProperties()方法获得控件的所有内部属性。

Quick控件: QuickItem

Qt自动化中有一类控件比较特殊,那就是在模型管理器中以Quick前缀显示的控件。代表该控件是基于Qt Quick技术开发的,与之对应的,本篇文档里面介绍的其它控件都是基于Qt Widget技术开发的。

JavaScript
Python
export interface QuickItem extends QtControl {
    text(): Promise<string>;
    set(text:string): Promise<void>;
}
class QuickItem(QtControl):
	def text() -> str
	def set(text) -> None
下面是Quick控件提供的方法:

text(): Promise<string[]>

获取当前Quick控件中的文本。等效于调用property("text")

  • 返回值:字符串,Quick控件内部的文本。

下面两种调用的结果返回一致:

JavaScript
Python
await modelQt.getQuick("Button").text()
await modelQt.getQuick("Button").property("text")
modelQt.getQuick("Button").text()
modelQt.getQuick("Button").property("text")

set(text): Promise<void[]>

设置当前Quick控件中的文本或值。

  • text:string字符串类型,需要设置的值。
  • 返回值:没有任何返回值的异步方法。 如果不确定被测应用具体的开发框架,可以参考如何确定Qt应用使用的技术

Qt WebEngine

Qt WebEngine 是一个集成在Qt应用中的浏览器引擎,允许开发者在应用程序中嵌入和显示网页内容。下面是 Qt WebEngine 控件提供的方法,用于与内嵌网页进行交互:

JavaScript
export interface IQWebEngine extends IQtControl {
    runJavaScript(code: string): Promise<string>;
    html(): Promise<string>;
    text(): Promise<string>;
    url(): Promise<string>;
    setUrl(url: string): Promise<void>;
    clickElement(selector: string): Promise<void>;
    highlightElement(selector: string): Promise<void>;
}

runJavaScript(code: string): Promise<string>

执行指定的 JavaScript 代码。

  • code:string类型,表示要执行的 JavaScript 代码。
  • 返回值:字符串类型,返回 JavaScript 代码的执行结果。

html(): Promise<string>

获取当前页面的 HTML 内容。

  • 返回值:字符串类型,包含页面的 HTML 内容。

text(): Promise<string>

获取当前页面的文本内容。

  • 返回值:字符串类型,包含页面的文本内容。

url(): Promise<string>

获取当前页面的 URL。

  • 返回值:字符串类型,表示页面的 URL。

setUrl(url: string): Promise<void>

设置当前页面的 URL,并加载该页面。

  • url:string类型,表示要加载的 URL。
  • 返回值:没有任何返回值的异步方法。

clickElement(selector: string): Promise<void>

点击指定的元素。

  • selector:string类型,表示要点击的元素的 CSS 选择器。
  • 返回值:没有任何返回值的异步方法。

highlightElement(selector: string): Promise<void>

高亮显示指定的元素。

  • selector:string类型,表示要高亮显示的元素的 CSS 选择器。
  • 返回值:没有任何返回值的异步方法。 ```

results matching ""

    No results matching ""