如何使用Squish找到qml元素的id属性?

1 投票
1 回答
2356 浏览
提问于 2025-04-17 15:38

我被分配了一个任务,要自动化qml程序。
我对python和Squish都还很陌生。
我正在尝试找到一种方法来获取文本元素的id属性,
比如:

Text{
id:testLabel
text:"Hello"
}

所以在Squish中,我通过Spy来捕捉这个对象:

waitForObject(":GAMES.Hello_Text")

但我想要的捕捉方式是:

waitForObject(":GAMES.testLabel_Text")

这可能实现吗?如果不行,还有其他方法可以尝试吗?

注意:我需要比较不同语言的文本。

1 个回答

2

诊断

我觉得你把“真实名称”和“符号名称”搞混了。我建议你去看看Squish的官方对象映射文档,但我的理解是,Squish的符号名称(以冒号开头的名称)基本上就像变量名称。它们是用来在你的objects.map中查找标识符的键。

objects.map中包含了符号名称和Squish所说的“真实名称”。真实名称是一个匹配模式,可以用来找到一个Qt对象。例如,你的objects.map文件中可能有这样的行:

:GAMES.Hello_Text    {name='Hello_Text' type='QLineEdit' visible='1' window=':GAMES'}
:GAMES.testLabel_Text    {name='testLabel_Text' type='QLineEdit' visible='1' window=':GAMES'}

如你所见,这表示“:GAMES.Hello_Text”和“:GAMES.testLabel_Text”都是在“:GAMES”窗口中的QLineEdit字段(“:GAMES”本身也是一个符号名称,在objects.map的其他地方有真实的说明)。

潜在解决方案

为了获得全面的帮助,我建议你发布你objects.map中相关的条目。相关条目是指你感兴趣的对象,以及它们的直接父对象。

虽然我不太确定你具体需要什么,但如果你想在由“:GAMES”符号名称指定的对象中查找任意和程序确定的元素,这里有三种方法。

1. 查找父对象并检查它的属性

games = waitForObject(":GAMES")
mytext = games.testLabel_Text

2. 查找父对象的属性

mytext = waitForObjectAttribute(":GAMES", "testLabel_Text") 

请注意,在这种情况下,“testLabel_Text”是一个任意的文本字符串,指的是由“:GAMES”符号名称指定的对象的一个属性。你可以把waitForObjectAttribute()看作类似于Python内置的getattr()

3. 使用真实名称查找所需信息

mytext = waitForObject("{name='testLabel_Text' type='QLineEdit' visible='1' window=':GAMES'}")

撰写回答