【发布时间】:2015-03-27 14:28:11
【问题描述】:
我正在尝试使用 PyWinAuto 进行一些 Tkinter GUI 测试。我有一个用 Tk 编写的简单应用程序,which looks like this.
问题是 - 我无法让 PyWinAuto 识别和使用我的应用程序中的按钮/条目。
我试过了
>>> app.Prototype.PrintControlIdentifiers()
但它什么也不返回或:
>>> app.Prototype.print_control_identifiers()
Control Identifiers:
TkChild - '' (L308, T81, R1108, B681)
'' '0' '1' 'TkChild' 'TkChild0' 'TkChild1'
Button - '' (L763, T86, R878, B112)
'2' 'Button' 'Button0' 'Button1'
Button - '' (L613, T86, R728, B112)
'3' 'Button2'
Button - '' (L463, T86, R578, B112)
'4' 'Button3'
Button - '' (L313, T86, R428, B112)
'5' 'Button4'
TkChild - '' (L613, T171, R737, B198)
'6' 'TkChild2'
TkChild - '' (L463, T171, R587, B198)
'7' 'TkChild3'
TkChild - '' (L313, T171, R437, B198)
'8' 'TkChild4'
Static - '' (L613, T141, R949, B170)
'9' 'Static' 'Static0' 'Static1'
Static - '' (L463, T141, R799, B170)
'10' 'Static2'
Static - '' (L313, T141, R649, B170)
'11' 'Static3'
应用程序窗口名称为 Prototype(Tkinter 标题 Prototype-GUI)。我还尝试在小部件中设置 _name 和 name,如下所示:
param_range = Entry(wrapper, self.basicEntrySett, name="entryrange")
或:
param_range = Entry(wrapper, self.basicEntrySett, _name="entryrange")
但它所做的只是:
print param_range.winfo_name()
entryrange
并且打印 PrintControlIdentifiers 输出没有改变。我想以人类可读的方式命名它们。
【问题讨论】:
-
不确定在这种情况下它是否对您有帮助,但请查看Swapy。 PyWinAuto 对我来说消除了很多困惑和挫败感。
-
不太了解 Tkinter。我看到您已经设置了控件的名称属性。是否可以改为设置 text 属性?如果没有,那么您可以执行 param_range = app.Prototype.Button0 & 然后 param_range.click() 之类的操作。只是一个使用有意义的名字的例子。
-
@Jkdc 好吧,它更容易处理,但小部件的 ID 有时会改变......我不知道为什么会发生这种情况。
-
@LittlePanda:我试试这个,谢谢。
标签: python tkinter gui-testing pywinauto