使对象类名称成为参数

时间:2011-09-22 14:08:46

标签: testcomplete

我有一个TC脚本,可以处理各种屏幕的报告选项。窗口类名称在每个屏幕上都会更改,并且由于我希望此脚本在翻译环境中工作,因此窗口标题也将更改。第一部分正常工作,但我如何考虑更改窗口名称?如果我删除标题,TC炸弹会出现模糊的窗口识别错误。

当前代码段(带有一个屏幕的标题):

w := p.WaitWindow('*', 'Options', 1, 10000);   
if w.Name='frmBasicOpt' then
begin
....

我可以将类名设置为输入的参数,这样我可以省略标题吗?如果是这样,我该怎么做?

头......受伤了。

谢谢!

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解这项任务,但我会尽力帮助理解。 因此,窗口类名称是一个动态的东西,这就是你用通配符掩盖它的原因。但是如果你能够参数化它,你就告诉你要使用类名。因此,似乎有一种方法可以在某个地方测试执行期间获取类名。如果是这样,您可以将类名放入变量,并将此变量作为参数传递给WaitWindow方法,并屏蔽标题以避免使用特定于语言的标题:

clsName := ....; // get it from somewhere
w := p.WaitWindow(clsName, '*', 1, 10000);
if w.Name='frmBasicOpt' then
begin

如果我的理解不正确并且无法事先知道类名,您可以考虑使用不同的方法来识别“选项”窗口而不指定标题。可能的解决方案包括:

  1. 对话框打开后,它将变为活动状态。因此,您可以通过Sys.Desktop.ActiveWindow进行对话。

  2. 如果这是一个MFC应用程序,请注意窗口的ControlID属性 - 它可以在应用程序的代码中设置,用于对象识别。因此,您可以使用FindChild方法按属性值查找窗口。

  3. 如果窗口中有一些仅特定于此窗口的子对象,则可以创建一个函数来获取Process对象的所有子窗口(FindAllChildren),遍历列表并检查它们中的哪一个那些特定的儿童对象。

  4. 这对你有用吗?如果没有,那么关于你的任务的更多信息可能会帮助我提出其他建议。

    亚历