如何使用Squish找到qml元素的id属性?
我被分配了一个任务,要自动化qml程序。
我对python和Squish都还很陌生。
我正在尝试找到一种方法来获取文本元素的id属性,
比如:
Text{
id:testLabel
text:"Hello"
}
所以在Squish中,我通过Spy来捕捉这个对象:
waitForObject(":GAMES.Hello_Text")
但我想要的捕捉方式是:
waitForObject(":GAMES.testLabel_Text")
这可能实现吗?如果不行,还有其他方法可以尝试吗?
注意:我需要比较不同语言的文本。
1 个回答
诊断
我觉得你把“真实名称”和“符号名称”搞混了。我建议你去看看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'}")