Tcl / Tk-自动化GUI测试

| 我想自动化GUI的测试。我阅读了以下文章,但是如果有人可以为下面的例子发布示例测试代码,那么对我来说将更容易理解。 以下是我的简单Hello World代码。
namespace eval Gui {
}

proc Gui::hello {} {
  toplevel .hello
  wm title .hello \"Hello\" 
  wm resizable .hello 0 0 ;# not resizable

  # create a frame to hold the check widgets 
  set f [frame .hello.boolean -borderwidth 10] 
  pack $f -side top

  # OK and Cancel buttons 
  button .hello.ok -text \"OK\" -command [list Gui::Ok .hello ]
  button .hello.cancel -text \"Cancel\" -command [list Gui::cancel .hello ]
  pack   .hello.cancel .hello.ok -side right

  bind .hello <Return> {Gui::Ok .hello ; break}
  bind .hello <Escape> {Gui::cancel .hello ; break}
}

proc Gui::Ok { arg } { 
  set x [list puts \"Hello world!\"]
  eval $x 
  destroy $arg
}

proc Gui::cancel { arg } { 
  destroy $arg
}

#-------------------------------------------------------------------
# Gui main window  
#-------------------------------------------------------------------
proc Gui::initialize { } {
  # build the frame which contains menu options 
  frame .mbar -relief raised -bd 2
  frame .mdummy -width 200 -height 240
  pack .mbar .mdummy -side top -fill x 

  # menu options 
  menubutton .mbar.command -text Command -underline 0 -menu .mbar.command.menu
  pack .mbar.command -side left

  # menu under command options 
  menu .mbar.command.menu -tearoff 0
  .mbar.command.menu add command -label \"Hello...\" -command [list Gui::hello]
}

#-------------------------------------------------------------------
# main code
#-------------------------------------------------------------------
Gui::initialize
我想测试
Command -> Hello ... -> OK
,看看它是否输出
Hello world!
。如果有人可以发布示例代码来模拟这些点击并自动对其进行测试,那就太好了。     
已邀请:
        使按钮的行为像被单击一样,最简单的方法是使用其
invoke
方法:
.hello.ok invoke
当然,那么您还必须捕获该调用的结果。在测试方面,向stdout编写并不是世界上最有用的东西(除非您将测试工具包装在另一个过程中,并且…好吧,让我们把它留给我们做更多的工作)。重组代码,以便在测试GUI的一部分时可以使用其他后端,这将对您有很大帮助。 也有可能低于方法调用的级别,直到您以
event generate
开始伪造事件。这还需要做很多工作,因为您不仅可以产生鼠标点击和按键。您还必须合成
<Enter>
<FocusIn>
事件,以便Tk \的小部件能够正确武装自己。这是一个示例(ѭ8将事件放在事件队列的末尾):
event generate .hello.ok <Enter> -when tail
event generate .hello.ok <ButtonPress-1> -when tail
event generate .hello.ok <ButtonRelease-1> -when tail
您甚至可以转到生成相对于顶层或整个根窗口定位的事件的位置(尽管Tk仅在内部传递它们;它不会将事件发送到其他应用,因为那样会很不礼貌),但我建议您离开如果您不需要它们,则将它们放置在外面,因为它们会使您的代码非常脆弱(通常不重要),例如更改详细的字体。 祝您测试GUI时好运。很难做好。通过在适当的地方传入脚本以将其配置为参数,从而使您的代码与GUI脱离后端(在Tcl中相当琐碎,并且等效于其他语言中的“模拟”之类的事情)将通过以下方式大有帮助让您不必一次测试所有内容。那将帮助您保持理智。     

要回复问题请先登录注册