gpt4 book ai didi

testing - Tcl/Tk - 自动化 GUI 测试

转载 作者:行者123 更新时间:2023-11-28 20:25:07 25 4
gpt4 key购买 nike

我想自动化我的 GUI 测试。我经历了以下post但如果有人可以发布以下示例的示例测试代码,我会更容易理解。

以下是我的简单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 的小部件正确地武装自己。这是一个示例(-when tail 将事件放在事件队列的末尾):

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 中非常简单,相当于在其他语言中完成的“模拟”之类的事情)将有很大帮助阻止您一次测试所有内容。这将帮助您保持理智。

关于testing - Tcl/Tk - 自动化 GUI 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com