基本类型对象

在上一篇中我们了解了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对象类型。

方法名 描述
text 获取按钮上的内容。

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

text()

获取按钮上的内容。

返回值:

  • string类型,异步返回按钮上的文本内容。

使用示例

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

JavaScript
Python
// 获取按钮文本并验证
let text = await model.getButton("Button").text();
assert.equal(text, 'Button');
# 获取按钮文本并验证
text = model.getButton("Button").text()
assert text == 'Button'


窗口控件: Window

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

方法名 描述
activate 激活目标窗口,使目标窗口出现在桌面最上层。
close 关闭目标窗口。
maximize 最大化目标窗口。
minimize 最小化目标窗口。
restore 恢复目标窗口到正常状态。

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

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

返回值:

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

使用示例

JavaScript
Python
// 激活Qt应用窗口
await model.getWindow("MainWindow").activate();
# 激活Qt应用窗口
model.getWindow("MainWindow").activate()

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

close()

关闭目标窗口。

返回值:

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

使用示例

JavaScript
Python
// 关闭Qt应用窗口
await model.getWindow("MainWindow").close();
# 关闭Qt应用窗口
model.getWindow("MainWindow").close()

maximize()

最大化目标窗口。

返回值:

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

使用示例

JavaScript
Python
// 最大化Qt应用窗口
await model.getWindow("MainWindow").maximize();
# 最大化Qt应用窗口
model.getWindow("MainWindow").maximize()

minimize()

最小化目标窗口。

返回值:

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

使用示例

JavaScript
Python
// 最小化Qt应用窗口
await model.getWindow("MainWindow").minimize();
# 最小化Qt应用窗口
model.getWindow("MainWindow").minimize()

restore()

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

返回值:

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

使用示例

JavaScript
Python
// 先最小化窗口
await model.getWindow("MainWindow").minimize();
// 然后恢复窗口到正常状态
await model.getWindow("MainWindow").restore();
# 先最小化窗口
model.getWindow("MainWindow").minimize()
# 然后恢复窗口到正常状态
model.getWindow("MainWindow").restore()


标签控件: Label

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

方法名 描述
text 获得标签当前的值。

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

text()

获得标签当前的值。

返回值:

  • string类型,异步返回标签的文本内容。

使用示例

校验获取标签当前的值,假设当前标签控件为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,没有区分单行输入框与多行输入框。提供的操作方法和属性方法都是针对输入框中的值。

方法名 描述
set 设置输入框中的值。
clearAll 清除输入框中的值。
value 获取当前输入框中的值并返回。

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)

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

参数:

  • value: string类型,期望写入到输入框的值。

返回值:

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

使用示例

JavaScript
Python
// 在输入框中输入文本
await model.getEdit("Edit").set("Hello World!");
# 在输入框中输入文本
model.getEdit("Edit").set("Hello World!")

clearAll()

清除输入框中的值。

返回值:

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

使用示例

JavaScript
Python
// 清空输入框内容
await model.getEdit("Edit").clearAll();
# 清空输入框内容
model.getEdit("Edit").clearAll()

value()

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

返回值:

  • string类型,异步返回输入框中的文本内容。

使用示例

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

JavaScript
Python
// 获取输入框内容并验证
let actual = await model.getEdit("Edit").value();
let expected = 'Hello World!';
assert.equal(actual, expected);
# 获取输入框内容并验证
actual = model.getEdit("Edit").value()
expected = 'Hello World!'
assert actual == expected


单选按钮控件: RadioButton

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

方法名 描述
check 选中目标单选按钮。
checked 获取目标单选按钮的选中状态。

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

check()

选中目标单选按钮。

返回值:

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

使用示例

JavaScript
Python
// 选中单选按钮
await model.getRadioButton("男").check();
# 选中单选按钮
model.getRadioButton("男").check()

checked()

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

返回值:

  • boolean类型,异步返回目标单选按钮是否选中。

使用示例

JavaScript
Python
// 检查单选按钮是否被选中
let isChecked = await model.getRadioButton("男").checked();
console.log(`单选按钮是否选中: ${isChecked}`);
# 检查单选按钮是否被选中
is_checked = model.getRadioButton("男").checked()
print(f"单选按钮是否选中: {is_checked}")


复选框控件: CheckBox

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

方法名 描述
toggleCheck 设置目标复选框的选中状态。
checkState 获取目标复选框的选中状态。

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)

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

参数:

  • checkState: boolean | 'partial'类型,true代表选中复选框,false代表取消选中目标复选框,'partial'代表部分选中,通常不使用。

返回值:

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

使用示例

JavaScript
Python
// 选中复选框
await model.getCheckBox("记住密码").toggleCheck(true);

// 取消选中复选框
await model.getCheckBox("记住密码").toggleCheck(false);
# 选中复选框
model.getCheckBox("记住密码").toggleCheck(True)

# 取消选中复选框
model.getCheckBox("记住密码").toggleCheck(False)

checkState()

获取目标复选框的选中状态,true代表已选中,false代表未选中。

返回值:

  • boolean | 'partial'类型,异步返回目标复选框是否选中。

使用示例

JavaScript
Python
// 获取复选框的状态
let state = await model.getCheckBox("记住密码").checkState();
if (state === true) {
    console.log("复选框已选中");
} else if (state === false) {
    console.log("复选框未选中");
}
# 获取复选框的状态
state = model.getCheckBox("记住密码").checkState()
if state == True:
    print("复选框已选中")
elif state == False:
    print("复选框未选中")


组合框: ComboBox

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

方法名 描述
open 展开下拉框。
select 选择下拉框中的指定选项。
selectedIndex 获取当前选中的值在下拉框中的位置。
selectedName 获取当前选中的值。
items 获取目标组合框中所有可选选项的名称。

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

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

返回值:

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

使用示例

可通过invoke("hidePopup")的方式折叠下拉框。

JavaScript
Python
// 通过open()方法展开下拉框
await model.getComboBox("combo_name").open();
// 通过invoke("hidePopup")方法折叠下拉框
await model.getComboBox("combo_name").invoke("hidePopup");
# 通过open()方法展开下拉框
model.getComboBox("combo_name").open()
# 通过invoke("hidePopup")方法折叠下拉框
model.getComboBox("combo_name").invoke("hidePopup")

select(nameOrIndex)

选择下拉框中的指定选项。

参数:

  • nameOrIndex: numberstring类型。如果为数字,则会选中下拉框中相应索引位置的选项;如果为字符串,则会选择下拉框中相应名称的选项。

返回值:

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

使用示例

JavaScript
Python
// 通过索引选择第一个选项
await model.getComboBox("城市选择").select(0);

// 通过名称选择选项
await model.getComboBox("城市选择").select("北京");
# 通过索引选择第一个选项
model.getComboBox("城市选择").select(0)

# 通过名称选择选项
model.getComboBox("城市选择").select("北京")

selectedIndex()

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

返回值:

  • number类型,异步返回当前值在下拉框中的索引位置。

使用示例

JavaScript
Python
// 获取当前选中项的索引
let index = await model.getComboBox("城市选择").selectedIndex();
console.log(`当前选中项索引: ${index}`);
# 获取当前选中项的索引
index = model.getComboBox("城市选择").selectedIndex()
print(f"当前选中项索引: {index}")

selectedName()

获取当前选中的值。

返回值:

  • string类型,异步返回当前选中的值。

使用示例

JavaScript
Python
// 获取当前选中的选项名称
let selected = await model.getComboBox("城市选择").selectedName();
console.log(`当前选中: ${selected}`);
# 获取当前选中的选项名称
selected = model.getComboBox("城市选择").selectedName()
print(f"当前选中: {selected}")

items()

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

返回值:

  • string[]类型,异步返回所有可选选项的名称组成的字符串数组。

使用示例

JavaScript
Python
// 获取所有可选项
let allItems = await model.getComboBox("城市选择").items();
console.log(`可选项: ${allItems.join(', ')}`);
# 获取所有可选项
all_items = model.getComboBox("城市选择").items()
print(f"可选项: {', '.join(all_items)}")


选值框: SpinBox

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

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

方法名 描述
increment 使取值框的值增加一个单位。
decrement 使取值框的值减少一个单位。

该控件的类型定义如下:

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

increment()

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

返回值:

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

使用示例

JavaScript
Python
// 增加数值
await model.getSpinBox("数量").increment();
// 连续增加多次
for (let i = 0; i < 5; i++) {
    await model.getSpinBox("数量").increment();
}
# 增加数值
model.getSpinBox("数量").increment()
# 连续增加多次
for i in range(5):
    model.getSpinBox("数量").increment()

decrement()

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

返回值:

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

使用示例

JavaScript
Python
// 减少数值
await model.getSpinBox("数量").decrement();
// 连续减少多次
for (let i = 0; i < 3; i++) {
    await model.getSpinBox("数量").decrement();
}
# 减少数值
model.getSpinBox("数量").decrement()
# 连续减少多次
for i in range(3):
    model.getSpinBox("数量").decrement()


应用控件: Application

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

方法名 描述
launch 启动应用。
quit 退出应用。
exists 检查应用是否存在。
appInfo 获取应用自身的信息。
pid 获取应用的进程号。
topControls 获取顶层控件。
findAll 遍历所有同名进程。
fromPoint 从屏幕坐标点获取控件。

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[]>;
    fromPoint(x: number, y: number): 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]
    def findAll() -> List[QtControl]
    def fromPoint(x: int, y: int) -> List[QtControl]

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

appInfo()

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

返回值:

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

使用示例

JavaScript
Python
// 获取应用的详细信息
let info = await model.getApplication("basiclayouts").appInfo();
console.log(`应用名称: ${info.appName}`);
console.log(`应用路径: ${info.appPath}`);
console.log(`应用版本: ${info.appVersion}`);
console.log(`进程ID: ${info.pid}`);
# 获取应用的详细信息
info = model.getApplication("basiclayouts").appInfo()
print(f"应用名称: {info['appName']}")
print(f"应用路径: {info['appPath']}")
print(f"应用版本: {info['appVersion']}")
print(f"进程ID: {info['pid']}")

pid()

获取应用的进程号。

返回值:

  • number类型,进程编号。

使用示例

JavaScript
Python
// 获取应用进程ID
let processId = await model.getApplication("basiclayouts").pid();
console.log(`应用进程ID: ${processId}`);
# 获取应用进程ID
process_id = model.getApplication("basiclayouts").pid()
print(f"应用进程ID: {process_id}")

launch(appPath?, waitSeconds?)

启动应用,如果不传入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);

    // 方法二:直接使用 launch() 方法
    await modelQt.getApplication("basiclayouts").launch();
    
    // 也可以指定应用路径和超时时间
    await modelQt.getApplication("basiclayouts").launch("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe", 15);
})()
from leanproAuto import QtAuto
modelQt = QtAuto.loadModel("model1.tmodel")

# 方法一:先启动进程,再等待应用就绪
QtAuto.launchQtProcessAsync("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe")
modelQt.getApplication("basiclayouts").exists(10)

# 方法二:直接使用 launch() 方法
modelQt.getApplication("basiclayouts").launch()

# 也可以指定应用路径和超时时间
modelQt.getApplication("basiclayouts").launch("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe", 15)

quit()

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

返回值:

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

使用示例

JavaScript
Python
// 退出应用
await model.getApplication("basiclayouts").quit();
# 退出应用
model.getApplication("basiclayouts").quit()

findAll()

遍历所有同名进程。

返回值:

  • 所有匹配应用对象,且允许在返回的对象上继续调用模型节点。

使用示例

JavaScript
Python
// 获取所有同名应用进程
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()
}
# 获取所有同名应用进程
apps = modelQt.getApplication("standarddialogs").findAll()

# 定位PID最小的进程
apps_pid = [app.pid() for app in apps]
minimal_pid = sorted(apps_pid)[0]
app = apps[apps_pid.index(minimal_pid)]
current_app_pid = app.pid()
assert current_app_pid == minimal_pid

# 遍历操作所有进程
for app in apps:
    # 激活窗口
    app.getWindow("Standard_Dialogs").activate()
    
    # 点击 "QInputDialog::getInt()" 按钮
    app.getButton("QInputDialog::getInt()").click()
    app.getButton("OK").click()
    
    # 点击 "QInputDialog::getMultiLineText" 按钮
    app.getButton("QInputDialog::getMultiLineText").click()
    app.getButton("OK").click()
    app.getButton("QInputDialog::getMultiLineText").click()

# 关闭所有进程
for app in apps:
    app.quit()

fromPoint(x, y)

从屏幕坐标点获取控件。

参数:

  • xnumber类型,整个屏幕的水平像素。
  • ynumber类型,整个屏幕的垂直像素。

返回值:

  • 屏幕指定位置的控件。如果该坐标在应用窗口范围之外,则返回为空。

使用示例

示例:查找名为button1的按钮右侧100个像素位置的控件

JavaScript
Python
// 获取按钮button1的屏幕位置坐标信息
let rect = await model.getButton("button1").rect();
// 计算button1中心坐标,并将水平坐标增加100个像素
let x = Math.floor(rect.x + rect.width / 2) + 100; 
let y = Math.floor(rect.y + rect.height / 2);
// 根据屏幕坐标查找控件,并打印控件属性
let wid = await model.getApplication("app_name").fromPoint(x, y);
let prop = await wid.allProperties();
console.log(prop);
# 获取按钮button1的屏幕位置坐标信息
rect = model.getButton("button1").rect()
# 计算button1中心坐标,并将水平坐标增加100个像素
x = int(rect.x + rect.width / 2) + 100
y = int(rect.y + rect.height / 2)
# 根据屏幕坐标查找控件,并打印控件属性
wid = model.getApplication("app_name").fromPoint(x, y)
prop = wid.allProperties()
print(prop)


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

MenuBar 控件方法:

方法名 描述
open 打开目标菜单栏选项。
items 获取菜单栏中的所有选项的控件对象。

MenuBarItem 控件方法:

方法名 描述
open 打开菜单项。
text 获取菜单项文本。

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提供的方法:

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

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

参数:

  • itemNamestring类型,目标菜单栏选项的名称。

返回值:

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

使用示例

JavaScript
Python
// 打开菜单栏中的 "File" 选项
await model.getMenuBar("MainMenuBar").open("File");
# 打开菜单栏中的 "File" 选项
model.getMenuBar("MainMenuBar").open("File")

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

返回值:

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

使用示例

JavaScript
Python
// 获取所有菜单栏选项
let menuItems = await model.getMenuBar("MainMenuBar").items();
console.log(`菜单栏选项数量: ${menuItems.length}`);

// 遍历所有菜单栏选项
for (let item of menuItems) {
    let itemText = await item.text();
    console.log(`菜单项: ${itemText}`);
}
# 获取所有菜单栏选项
menu_items = model.getMenuBar("MainMenuBar").items()
print(f"菜单栏选项数量: {len(menu_items)}")

# 遍历所有菜单栏选项
for item in menu_items:
    item_text = item.text()
    print(f"菜单项: {item_text}")

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

打开菜单项。

返回值:

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

使用示例

JavaScript
Python
// 通过 items() 获取菜单项后打开
let menuItems = await model.getMenuBar("MainMenuBar").items();
await menuItems[0].open();
# 通过 items() 获取菜单项后打开
menu_items = model.getMenuBar("MainMenuBar").items()
menu_items[0].open()

获取菜单项文本。

返回值:

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

使用示例

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

JavaScript
Python
// 获取菜单项文本并验证
let text = await model.getMenuItem("File").text();
assert.equal(text, 'File');
# 获取菜单项文本并验证
text = model.getMenuItem("File").text()
assert text == 'File'


针对应用中的菜单和菜单选项的控件,MenuMenuItem,操作菜单的选择、展开和隐藏。

Menu 控件方法:

方法名 描述
invoke 直接触发目标菜单中的菜单项。
show 展开目标菜单。
hide 隐藏目标菜单。
itemNames 获取目标菜单中的所有菜单项名称。
items 获取目标菜单中的所有菜单项对象。

MenuItem 控件方法:

方法名 描述
invoke 直接触发目标菜单项。
checkable 获取菜单项是否可以勾选。
toggleCheck 改变菜单项勾选状态。
checked 获取菜单项的勾选状态。
text 获取菜单项的文本内容。
itemIndex 获取菜单项的index。
hover 使鼠标悬停在目标菜单项上。

关于菜单控件的定义如下,但最常用和关键的是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

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

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

参数:

  • itemName:目标菜单项的名称,需要为目标菜单的一级菜单项。

返回值:

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

使用示例

JavaScript
Python
// 直接触发菜单中的 "New" 菜单项
await model.getMenu("File").invoke("New");
# 直接触发菜单中的 "New" 菜单项
model.getMenu("File").invoke("New")

展开目标菜单。

返回值:

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

使用示例

JavaScript
Python
// 展开菜单
await model.getMenu("File").show();
# 展开菜单
model.getMenu("File").show()

隐藏目标菜单。

返回值:

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

使用示例

JavaScript
Python
// 隐藏菜单
await model.getMenu("File").hide();
# 隐藏菜单
model.getMenu("File").hide()

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

返回值:

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

使用示例

JavaScript
Python
// 获取菜单中的所有菜单项名称
let names = await model.getMenu("File").itemNames();
console.log(`菜单项: ${names.join(', ')}`);
# 获取菜单中的所有菜单项名称
names = model.getMenu("File").itemNames()
print(f"菜单项: {', '.join(names)}")

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

返回值:

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

使用示例

JavaScript
Python
// 获取所有菜单项对象并遍历
let items = await model.getMenu("File").items();
for (let item of items) {
    let text = await item.text();
    console.log(`菜单项: ${text}`);
}
# 获取所有菜单项对象并遍历
items = model.getMenu("File").items()
for item in items:
    text = item.text()
    print(f"菜单项: {text}")

以下是MenuItem对象的方法。

直接触发目标菜单项。

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

返回值:

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

使用示例

JavaScript
Python
// 直接触发菜单项
await model.getMenuItem("New").invoke();
# 直接触发菜单项
model.getMenuItem("New").invoke()

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

返回值:

  • boolean类型,表示菜单项是否可勾选。

使用示例

JavaScript
Python
// 检查菜单项是否可勾选
let canCheck = await model.getMenuItem("ShowToolbar").checkable();
console.log(`菜单项可勾选: ${canCheck}`);
# 检查菜单项是否可勾选
can_check = model.getMenuItem("ShowToolbar").checkable()
print(f"菜单项可勾选: {can_check}")

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

参数:

  • valueboolean类型,表示勾选状态。

返回值:

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

使用示例

JavaScript
Python
// 设置菜单项为勾选状态
await model.getMenuItem("ShowToolbar").toggleCheck(true);
// 取消菜单项的勾选状态
await model.getMenuItem("ShowToolbar").toggleCheck(false);
# 设置菜单项为勾选状态
model.getMenuItem("ShowToolbar").toggleCheck(True)
# 取消菜单项的勾选状态
model.getMenuItem("ShowToolbar").toggleCheck(False)

获取菜单项的勾选状态。

返回值:

  • boolean类型,表示勾选状态。

使用示例

JavaScript
Python
// 获取菜单项的勾选状态
let isChecked = await model.getMenuItem("ShowToolbar").checked();
console.log(`菜单项已勾选: ${isChecked}`);
# 获取菜单项的勾选状态
is_checked = model.getMenuItem("ShowToolbar").checked()
print(f"菜单项已勾选: {is_checked}")

获取菜单项的文本内容。

返回值:

  • 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'

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

返回值:

  • number类型,菜单项index。

使用示例

JavaScript
Python
// 获取菜单项的索引
let index = await model.getMenuItem("New").itemIndex();
console.log(`菜单项索引: ${index}`);
# 获取菜单项的索引
index = model.getMenuItem("New").itemIndex()
print(f"菜单项索引: {index}")

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

返回值:

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

使用示例

JavaScript
Python
// 悬停在菜单项上以展开子菜单
await model.getMenuItem("File").hover();
# 悬停在菜单项上以展开子菜单
model.getMenuItem("File").hover()


进度条控件: ProgressBar

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

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

方法名 描述
value 获取当前进度条中的值并返回。

形状如下:
进度条

类型文件如下:

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

value()

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

返回值:

  • number类型,进度条的当前值。

使用示例

JavaScript
Python
// 获取进度条的当前值
let progress = await model.getProgressBar("downloadProgress").value();
console.log(`当前进度: ${progress}%`);
# 获取进度条的当前值
progress = model.getProgressBar("downloadProgress").value()
print(f"当前进度: {progress}%")


旋钮控件: Dial

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

方法名 描述
value 获取当前旋钮的值并返回。
setValue 设置旋钮的值。

形状如下:
旋钮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()

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

返回值:

  • number类型,旋钮的当前值。

使用示例

JavaScript
Python
// 获取旋钮的当前值
let dialValue = await model.getDial("volumeDial").value();
console.log(`旋钮值: ${dialValue}`);
# 获取旋钮的当前值
dial_value = model.getDial("volumeDial").value()
print(f"旋钮值: {dial_value}")

setValue(value)

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

参数:

  • valuenumber类型,将旋钮旋至指定值的位置。

返回值:

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

使用示例

JavaScript
Python
// 设置旋钮的值为 50
await model.getDial("volumeDial").setValue(50);
# 设置旋钮的值为 50
model.getDial("volumeDial").setValue(50)


滑动条控件: Slider

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

方法名 描述
value 获取当前滑动条的值并返回。
setValue 设置滑动条的值。

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

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

返回值:

  • number类型,滑动条的当前值。

使用示例

JavaScript
Python
// 获取滑动条的当前值
let sliderValue = await model.getSlider("volumeSlider").value();
console.log(`滑动条值: ${sliderValue}`);
# 获取滑动条的当前值
slider_value = model.getSlider("volumeSlider").value()
print(f"滑动条值: {slider_value}")

setValue(value)

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

参数:

  • valuenumber类型,将滑块拖拽至指定值的位置。

返回值:

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

使用示例

JavaScript
Python
// 设置滑动条的值为 75
await model.getSlider("volumeSlider").setValue(75);
# 设置滑动条的值为 75
model.getSlider("volumeSlider").setValue(75)


滚动区域控件: ScrollArea

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

方法名 描述
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)

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

参数:

  • xnumber类型,水平像素数。
  • ynumber类型,垂直像素数。

返回值:

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

使用示例

JavaScript
Python
// 滚动到指定位置
await model.getScrollArea("contentArea").ensureVisible(100, 200);
# 滚动到指定位置
model.getScrollArea("contentArea").ensureVisible(100, 200)


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

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

TabBar 控件方法:

方法名 描述
activate 激活目标标签页。
closeTab 关闭目标标签页。
count 获取标签栏中的标签页数量。
activeIndex 获取当前界面中被激活的标签索引值。
activeName 获取当前界面中被激活的标签名称。
tabNames 获取所有标签页的标题。

Tab 控件方法:

方法名 描述
getItem 获取指定标签页的自动化对象。
activate 激活目标标签页。
closeTab 关闭目标标签页。
activeName 获取当前界面中被激活的标签名称。
activeIndex 获取当前界面中被激活的标签索引值。
count 获取标签栏中的标签页数量。
items 获取所有标签页。

TabItem 控件方法:

方法名 描述
activate 激活标签页。
closeTab 关闭标签页。
text 获取标签页标题。
itemIndex 获取标签页的index。

关于标签栏控件的定义如下:

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)

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

参数:

  • itemNameOrIndexnumberstring类型,目标标签页的索引值或标签页标题。

返回值:

  • TabItem类型,同步的返回一个TabItem类型的操作对象。

使用示例

JavaScript
Python
// 通过索引获取标签页
let tab = model.getTab("MainTab").getItem(0);
// 通过名称获取标签页
let tab2 = model.getTab("MainTab").getItem("首页");
# 通过索引获取标签页
tab = model.getTab("MainTab").getItem(0)
# 通过名称获取标签页
tab2 = model.getTab("MainTab").getItem("首页")

activate(itemNameOrIndex)

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

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

参数:

  • itemNameOrIndexnumberstring类型,目标标签页的索引值或标签页标题。

返回值:

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

使用示例

JavaScript
Python
// 通过索引激活标签页
await model.getTab("MainTab").activate(0);
// 通过名称激活标签页
await model.getTab("MainTab").activate("首页");
# 通过索引激活标签页
model.getTab("MainTab").activate(0)
# 通过名称激活标签页
model.getTab("MainTab").activate("首页")

closeTab(itemNameOrIndex)

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

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

参数:

  • itemNameOrIndexnumberstring类型,目标标签页的索引值或标签页标题。

返回值:

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

使用示例

JavaScript
Python
// 通过索引关闭标签页
await model.getTab("MainTab").closeTab(1);
// 通过名称关闭标签页
await model.getTab("MainTab").closeTab("设置");
# 通过索引关闭标签页
model.getTab("MainTab").closeTab(1)
# 通过名称关闭标签页
model.getTab("MainTab").closeTab("设置")

activeIndex()

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

返回值:

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

使用示例

JavaScript
Python
// 获取当前激活的标签页索引
let index = await model.getTab("MainTab").activeIndex();
console.log(`当前激活标签索引: ${index}`);
# 获取当前激活的标签页索引
index = model.getTab("MainTab").activeIndex()
print(f"当前激活标签索引: {index}")

activeName()

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

返回值:

  • string类型,标签页的名称。

使用示例

JavaScript
Python
// 获取当前激活的标签页名称
let name = await model.getTab("MainTab").activeName();
console.log(`当前激活标签: ${name}`);
# 获取当前激活的标签页名称
name = model.getTab("MainTab").activeName()
print(f"当前激活标签: {name}")

count()

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

返回值:

  • number类型,标签页的数量。

使用示例

JavaScript
Python
// 获取标签页数量
let tabCount = await model.getTab("MainTab").count();
console.log(`标签页数量: ${tabCount}`);
# 获取标签页数量
tab_count = model.getTab("MainTab").count()
print(f"标签页数量: {tab_count}")

items()

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

返回值:

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

使用示例

JavaScript
Python
// 获取所有标签页名称
let tabNames = await model.getTab("MainTab").items();
console.log(`所有标签页: ${tabNames.join(', ')}`);
# 获取所有标签页名称
tab_names = model.getTab("MainTab").items()
print(f"所有标签页: {', '.join(tab_names)}")

以下是TabItem对象的方法。

activate()

激活标签页。

返回值:

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

使用示例

JavaScript
Python
// 激活指定的标签页
let tab = model.getTab("MainTab").getItem(1);
await tab.activate();
# 激活指定的标签页
tab = model.getTab("MainTab").getItem(1)
tab.activate()

closeTab()

关闭标签页。

返回值:

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

使用示例

JavaScript
Python
// 关闭指定的标签页
let tab = model.getTab("MainTab").getItem(1);
await tab.closeTab();
# 关闭指定的标签页
tab = model.getTab("MainTab").getItem(1)
tab.closeTab()

text()

获取标签页标题。

返回值:

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

使用示例

JavaScript
Python
// 获取标签页标题
let tab = model.getTab("MainTab").getItem(0);
let title = await tab.text();
console.log(`标签页标题: ${title}`);
# 获取标签页标题
tab = model.getTab("MainTab").getItem(0)
title = tab.text()
print(f"标签页标题: {title}")

itemIndex()

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

返回值:

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

使用示例

JavaScript
Python
// 获取标签页的索引
let tab = model.getTab("MainTab").getItem("首页");
let index = await tab.itemIndex();
console.log(`标签页索引: ${index}`);
# 获取标签页的索引
tab = model.getTab("MainTab").getItem("首页")
index = tab.itemIndex()
print(f"标签页索引: {index}")

Quick控件: QuickItem

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

方法名 描述
text 获取当前Quick控件中的文本。
set 设置当前Quick控件中的文本或值。

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

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

返回值:

  • string类型,Quick控件内部的文本。

使用示例

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

JavaScript
Python
// 方法一:使用 text() 方法
let buttonText = await modelQt.getQuick("Button").text();
// 方法二:使用 property() 方法
let buttonText2 = await modelQt.getQuick("Button").property("text");
console.log(`按钮文本: ${buttonText}`);
# 方法一:使用 text() 方法
button_text = modelQt.getQuick("Button").text()
# 方法二:使用 property() 方法
button_text2 = modelQt.getQuick("Button").property("text")
print(f"按钮文本: {button_text}")

set(text)

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

参数:

  • textstring字符串类型,需要设置的值。

返回值:

  • 没有任何返回值的异步方法。

使用示例

JavaScript
Python
// 设置Quick控件的文本
await modelQt.getQuick("InputField").set("新的文本内容");
# 设置Quick控件的文本
modelQt.getQuick("InputField").set("新的文本内容")

如果不确定被测应用具体的开发框架,可以参考如何确定Qt应用使用的技术

Qt WebView/WebEngine

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

方法名 描述
runJavaScript 执行指定的 JavaScript 代码。
html 获取当前页面的 HTML 内容。
text 获取当前页面的文本内容。
url 获取当前页面的 URL。
setUrl 设置页面的 URL。
clickElement 点击页面中的元素。
highlightElement 高亮显示页面中的元素。
loaded 等待页面加载完成。

JavaScript
Python
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>;
    loaded(seconds?: number): Promise<boolean>;
}
class IQWebEngine(IQtControl):
    def runJavaScript(code: str) -> str
    def html() -> str
    def text() -> str
    def url() -> str
    def setUrl(url: str) -> None
    def clickElement(selector: str) -> None
    def highlightElement(selector: str) -> None
    def loaded(seconds: Optional[int]=None) -> bool

runJavaScript(code)

执行指定的 JavaScript 代码。

参数:

  • codestring类型,表示要执行的 JavaScript 代码。

返回值:

  • 字符串类型,返回 JavaScript 代码的执行结果。

使用示例

JavaScript
Python
// 执行 JavaScript 代码点击按钮
let script = 'document.querySelector("button.ant-btn-primary").click()';
await modelQt.getWebEngine("WebView2").runJavaScript(script);

// 执行 JavaScript 代码并获取返回值
let titleScript = 'document.title';
let title = await modelQt.getWebEngine("WebView2").runJavaScript(titleScript);
console.log(`页面标题: ${title}`);
# 执行 JavaScript 代码点击按钮
script = 'document.querySelector("button.ant-btn-primary").click()'
modelQt.getWebEngine("WebView2").runJavaScript(script)

# 执行 JavaScript 代码并获取返回值
title_script = 'document.title'
title = modelQt.getWebEngine("WebView2").runJavaScript(title_script)
print(f"页面标题: {title}")

html()

获取当前页面的 HTML 内容。

返回值:

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

使用示例

JavaScript
Python
// 获取页面 HTML 内容并验证
const html = await modelQt.getWebEngine("WebView2").html();
assert.ok(html.includes('<html>'));
# 获取页面 HTML 内容并验证
html = modelQt.getWebEngine("WebView2").html()
assert "<html>" in html

text()

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

返回值:

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

使用示例

JavaScript
Python
// 获取页面文本内容并验证
const text = await modelQt.getWebEngine("WebView2").text();
assert.ok(text.includes('登录'));
# 获取页面文本内容并验证
text = modelQt.getWebEngine("WebView2").text()
assert "登录" in text

url()

获取当前页面的 URL。

返回值:

  • 字符串类型,表示页面的 URL。

使用示例

JavaScript
Python
// 获取当前页面 URL
const url = await modelQt.getWebEngine("WebView2").url();
assert.equal(url, 'http://localhost:21477/user/login/');
# 获取当前页面 URL
url = modelQt.getWebEngine("WebView2").url()
assert url == 'http://localhost:21477/user/login/'

setUrl(url)

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

参数:

  • urlstring类型,表示要加载的 URL。

返回值:

  • 没有任何返回值的异步方法。

使用示例

JavaScript
Python
// 设置并加载新的 URL
const url = 'http://localhost:21477/user/login/';
await modelQt.getWebEngine("WebView2").setUrl(url);
# 设置并加载新的 URL
url = 'http://localhost:21477/user/login/'
modelQt.getWebEngine("WebView2").setUrl(url)

clickElement(selector)

点击指定的元素。

参数:

  • selectorstring类型,表示要点击的元素的 CSS 选择器。

返回值:

  • 没有任何返回值的异步方法。

使用示例

JavaScript
Python
// 点击密码输入框
await modelQt.getWebEngine("WebView2").clickElement("#password");
// 点击登录按钮
await modelQt.getWebEngine("WebView2").clickElement("button.login-btn");
# 点击密码输入框
modelQt.getWebEngine("WebView2").clickElement("#password")
# 点击登录按钮
modelQt.getWebEngine("WebView2").clickElement("button.login-btn")

highlightElement(selector)

高亮显示指定的元素。

参数:

  • selectorstring类型,表示要高亮显示的元素的 CSS 选择器。

返回值:

  • 没有任何返回值的异步方法。

使用示例

JavaScript
Python
// 高亮显示密码输入框
await modelQt.getWebEngine("WebView2").highlightElement("#password");
// 高亮显示登录按钮
await modelQt.getWebEngine("WebView2").highlightElement("button.login-btn");
# 高亮显示密码输入框
modelQt.getWebEngine("WebView2").highlightElement("#password")
# 高亮显示登录按钮
modelQt.getWebEngine("WebView2").highlightElement("button.login-btn")

loaded(seconds)

等待页面加载,或判断页面是否加载完成。

参数:

  • seconds:(可选)number类型,表示最长等待时间(超时时间),单位为秒。默认为0,即只检查一次,立即返回结果,不会等待或重试。

返回值:

  • boolean类型,异步的返回页面的加载结果。

使用示例

JavaScript
Python
// 等待页面加载完成,最多等待 5 秒
await modelQt.getWebEngine("WebView").loaded(5);

// 立即检查页面是否已加载
let isLoaded = await modelQt.getWebEngine("WebView").loaded();
console.log(`页面已加载: ${isLoaded}`);
# 等待页面加载完成,最多等待 5 秒
modelQt.getWebEngine("WebView").loaded(5)

# 立即检查页面是否已加载
is_loaded = modelQt.getWebEngine("WebView").loaded()
print(f"页面已加载: {is_loaded}")

results matching ""

    No results matching ""