基本类型对象
在上一篇中我们了解了CukeTest中的容器类和控件基类,接下来就是针对各种不同的控件类的API介绍了。本篇文章中将介绍以下几个基础的控件类:
- 按钮控件: Button
- 窗口控件: Window
- 标签控件: Label
- 输入框控件: Edit
- 单选按钮控件: RadioButton
- 复选框控件: CheckBox
- 组合框: ComboBox
- 选值框: SpinBox
- 应用控件: Application
- 进度条控件: ProgressBar
- 旋钮控件: Dial
- 滑动条控件: Slider
- 滚动区域控件: ScrollArea
- 菜单栏控件和菜单栏选项控件: MenuBar & MenuBarItem
- 菜单控件和菜单选项控件: Menu & MenuItem
- 标签栏控件和标签页控件: Tab & TabItem
- 图元控件及视图: GraphicsView & GraphicsItem
- Quick控件:QuickItem
而相对复杂的控件类有以下几个,由于包含的方法比较多,因此放到了其它文档中,请按照需求点击链接跳转:
- 列表类型对象: 介绍列表控件
List
和列表项控件ListItem
; - 树类型对象: 介绍树控件
Tree
和树节点控件TreeItem
; - 表格类型对象: 介绍表格控件
Table
和单元格控件TableItem
;
以及以上三个复杂控件的基类自定义视图ItemView
控件,针对Qt应用中从AbstractView
抽象视图派生出来的自定义组件,介绍如下:
- 自定义视图对象: 介绍自定义视图控件
ItemView
和自定义项控件ItemViewItem
;
由于各个控件类因为是继承自IQtControl,因此每个控件类都拥有通用控件的所有操作和属性方法。以CheckBox
控件类举例:
CheckBox
控件有一个操作方法——check()
用于设置是勾选还是清除勾选; 一个属性方法checked()
用于判断CheckBox的勾选状态。true
表示勾选,false
代表未勾选:
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
的方法实际上应该包含了基类的方法:
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>
}
IQtControl
和IQtContainer
中的操作和属性方法而没有自己特有的,比如Button控件。
基础控件类介绍
按钮控件: Button
针对普通的按钮控件,模型管理器提供了Button
对象类型。
export interface IQButton extends IQtControl {
text(): Promise<string>;
}
class QButton(QtControl):
def text() -> str
text(): Promise<string>
获取按钮上的内容。
- 返回值:
Promise<string>
类型,需要使用await
关键字取出其中的结果。
校验获取按钮上的内容,假设当前按钮控件为Button
。
let text = await model.getButton("Button").text();
assert.equal(text,'Button');
text = model.getButton("Button").text()
assert text == 'Button'
窗口控件: Window
针对应用窗口控件,模型管理器提供了Window
对象类型。
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
,没有操作方法,只有一个自己的属性方法:
export interface IQLabel extends IQtControl {
text(): Promise<string>
}
class QLabel(QtControl):
def text() -> str
text(): Promise<string>
获得标签当前的值。
- 返回值:
Promise<string>
类型,需要使用await
关键字取出其中的结果。
校验获取标签当前的值,假设当前标签控件为Line_1
。
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
,没有区分单行输入框与多行输入框。提供的操作方法和属性方法都是针对输入框中的值。
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
。
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
控件,按照使用逻辑提供了选中和获取选中状态的方法。
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
控件,能够直接设定选中状态,当然也可以获取状态。
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
控件,提供了选择指定下拉选项的操作方法。
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:
number
或String
类型。如果为数字,则会选中下拉框中相应索引位置的选项;如果为字符串,则会选择下拉框中相应名称的选项。 - 返回值: 不返回任何值的异步方法。
selectedIndex(): Promise<number>
获取当前选中的值在下拉框中的位置。
- 返回值:
Promise<number>
类型,代表当前值在下拉框中的位置。需要使用await
关键字取出其中的结果。
selectedItem(): Promise<string>
获取当前选中的值。
- 返回值:
Promise<string>
类型,代表当前选中的值。需要使用await
关键字取出其中的结果。
itemsToSelect(): Promise<string[]>
获取目标组合框中所有可选选项的名称。
- 返回值:
Promise<string[]>
类型,即字符串数组,获取目标组合框中所有可选选项的名称。需要使用await
关键字取出其中的结果。
选值框: SpinBox
针对应用中带上下箭头的选值框SpinBox
控件,为其提供了触发其增加/减少值的操作API。
SpinBox
控件继承自Edit控件,也就是说它除了以下的方法外,还能够使用Edit
控件的方法。这点可以从类型文件中看出来。
该控件的类型定义如下:
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
针对应用本身的一个控件,通常作为最顶层控件存在,提供了获取应用属性和操作应用的方法。
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
节点,名为basiclayouts
,appPath
属性为C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe
,那么以下两种写法等效:
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
针对应用中的工具栏操作的MenuBar
控件,以及工具栏中的按钮——MenuBarItem
控件,通常只用于点击或打开菜单按钮展开菜单栏。如果需要直接操作菜单选项,建议阅读菜单控件[Menu&MenuItem]的invoke()
方法。
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
控件的文本。
let text = await model.getMenuItem("File").text();
assert.equal(text,'File');
text = model.getMenuItem("File").text()
assert text == 'File'
菜单控件和菜单选项控件: Menu & MenuItem
针对应用中的菜单和菜单选项的控件,Menu
和MenuItem
,操作菜单的选择、展开和隐藏。
关于菜单控件的定义如下,但最常用和关键的是invoke()
操作方法,在后面进行介绍:
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[]
类型,返回所有菜单项名称组成的字符串数组。
items(): Promise<MenuItem[]>
获取目标菜单中的所有菜单项对象。
- 返回值:
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
控件的文本内容。
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()
方法取得进度条的值。
由于进度条的值通常是受控于内部逻辑或者其它控件,因此不支持直接修改其值。
形状如下:
类型文件如下:
export interface IQProgressBar extends IQtControl {
value(): Promise<number>;
}
class QProgressBar(QtControl):
def value() -> int
value(): Promise<number>
获取当前进度条中的值并返回。因为返回结果是数字,因此会省略百分比%
号。
- 返回值:
Promise<number>
类型,需要使用await
关键字取出其中的结果。
旋钮控件: Dial
针对用于手动调节值的旋钮控件,功能与滑动条控件类似,是Qt为了适配触屏应用推出的控件。
形状如下:
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
针对用于接收用户设定的值的滑动条控件。
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()
方法进行滚动。
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
针对应用中的标签页的控件,Tab
和TabItem
,进行标签页的切换。同时提供了控制标签页所在栏——标签栏控件TabBar
。
关于标签栏控件的定义如下:
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:
number
或string
类型,目标标签页的索引值或标签页标题。 - 返回值:
TabItem
类型,同步的返回一个TabItem
类型的操作对象。
activate(itemNameOrIndex): Promise<void>
激活目标标签页,传入标签页的索引值或标题。
如果是
TabItem
上的activate()
方法则不需要传入任何参数。
- itemNameOrIndex:
number
或string
类型,目标标签页的索引值或标签页标题。- 返回值: 不返回任何值的异步方法。
closeTab(itemNameOrIndex): Promise<void>
关闭目标标签页,传入标签页的索引值或标题。
如果是
TabItem
上的closeTab()
方法则不需要传入任何参数。
- itemNameOrIndex:
number
或string
类型,目标标签页的索引值或标签页标题。- 返回值: 不返回任何值的异步方法。
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将这类图元抽象为一种图元控件并进行识别和操作,并专门提供了几个识别属性用于定位图元控件:
- position: 目标在画布中的位置;
- bounding: 目标图元的碰撞箱,或者可以理解为轮廓信息;
- objectName: (可选)目标图元的名称,由于图元不一定都包含objectName,因此是可选的识别属性。
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技术开发的。
export interface QuickItem extends QtControl {
text(): Promise<string>;
set(text:string): Promise<void>;
}
class QuickItem(QtControl):
def text() -> str
def set(text) -> None
text(): Promise<string[]>
获取当前Quick控件中的文本。等效于调用property("text")
。
- 返回值:字符串,Quick控件内部的文本。
下面两种调用的结果返回一致:
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 控件提供的方法,用于与内嵌网页进行交互:
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 选择器。 - 返回值:没有任何返回值的异步方法。 ```