.NET的第三方控件包有很多,其中比较流行的有ComponentOne、DevComponents等,下面介绍如何利用.NET插件扩展开发包来处理这些第三方控件。
18.3.1 在Visual Studio中编写插件扩展代码
ComponentOne是.NET常用的第三方控件,其中的Toolbar控件在QTP中不能很好地支持录制和识别。在这种情况下,可以考虑使用QTP的.NET的插件扩展SDK开发一个插件扩展来支持该控件的录制和识别。
对于ComponentOne的ToolBar控件,我们可以采用QTP.NET插件扩展技术来处理,在开始之前,最好查阅ComponentOne的帮助文档,看看关于Toolbar控件的相关接口、类的描述。其中可以重点看看Command Links和Command的内容,因为Toolbar控件就是基于这两个核心的类实现的,在开发插件扩展时也需要使用到。
下面是在Visual Studio 2005中编写的插件扩展代码:
- using System;
- using Mercury.QTP.CustomServer;
- using System.Windows.Forms;
- using QuickTestCustomServer_C1ToolBar;
- using C1.Win.C1Command; // 引用ComponentOne的命令空间
- namespace QuickTestCustomServer_C1ToolBar
- {
- [ReplayInterface]
- public interface IC1ToolBarReplay
- {
- void C1ToolBar_Click(string text); // ToolBar单击事件
- }
- public class C1ToolBar :
- CustomServerBase,
- IC1ToolBarReplay
- {
- public C1ToolBar()
- {
- }
- // 监听Toolbar的单击事件
- public override void InitEventListener()
- {
- C1.Win.C1Command.C1ToolBar oControl =
- (C1.Win.C1Command.C1ToolBar)SourceControl;
- for (int i = 0; i < oControl.CommandLinks.Count; i++)
- {
- oControl.CommandLinks[i].Command.Click +=
- new C1.Win.C1Command.ClickEventHandler(this.oControl_ CommandClick);
- }
- }
- public override void ReleaseEventListener()
- {
- }
- // 把Toolbar单击事件录制下来
- private void oControl_CommandClick(object sender,
- C1.Win.C1Command.ClickEventArgs e)
- {
- C1.Win.C1Command.C1ToolBar oControl =
- (C1.Win.C1Command.C1ToolBar)SourceControl;
- base.RecordFunction("C1ToolBar_Click", RecordingMode.RECORD_SEND_LINE, e.CallerLink.Text);
- }
- // 回放录制的脚本
- public void C1ToolBar_Click(string text)
- {
- C1.Win.C1Command.C1ToolBar oControl =
- (C1.Win.C1Command.C1ToolBar)SourceControl;
- // 查找Toolbar中指定的项
- for (int i = 0; i < oControl.CommandLinks.Count; i++)
- {
- // 如果找到
- if (oControl.CommandLinks[i].Text == text)
- {
- if (oControl.CommandLinks[i].Command.IsParent == true)
- {
- System.Drawing.Rectangle oRect =
- oControl.CommandLinks[i].Bounds;
- int x = oRect.X + oRect.Width - 2;
- int y = oRect.Y + oRect.Height/2;
- // 单击找到的按钮的中间位置
- base.MouseClick(x, y,
- MOUSE_BUTTON.LEFT_MOUSE_BUTTON);
- }
- else
- {
- System.Drawing.Rectangle oRect =
- oControl.CommandLinks[i].Bounds;
- int x = oRect.X + oRect.Width / 2;
- int y = oRect.Y + oRect.Height / 2;
- base.MouseClick(x, y, MOUSE_BUTTON.LEFT_MOUSE_BUTTON);
- }
- break;
- }
- }
- base.ReplayReportStep("C1ToolBar_Click", EventStatus.EVENTSTATUS_GENERAL, text);
- }
- }
- }
18.3.2 部署插件扩展文件
把如下XML代码插入到QTP安装目录中的dat目录下的SwfConfig.xml文件中(注意修改DLL的文件路径):
- <!-- Merge this XML content into file "<QuickTest Professional>dat SwfConfig.xml". -->
- <Control Type="C1.Win.C1Command.C1ToolBar" >
- <CustomRecord>
- <Component>
- <Context>AUT</Context>
- <DllName>D:QTP_dotNETComponentOneToolBar QuickTestCustomServer_C1ToolBarQuickTestCustomServer_C1ToolBarinQuickTestCustomServer_C1ToolBar.dll</DllName>
- <TypeName>QuickTestCustomServer_C1ToolBar.C1ToolBar</TypeName>
- </Component>
- </CustomRecord>
- <CustomReplay>
- <Component>
- <Context>AUT</Context>
- <DllName>D:QTP_dotNETComponentOneToolBar QuickTestCustomServer_C1ToolBarQuickTestCustomServer_C1ToolBarinQuickTestCustomServer_C1ToolBar.dll</DllName>
- <TypeName>QuickTestCustomServer_C1ToolBar.C1ToolBar</TypeName>
- </Component>
- </CustomReplay>
- <!--<Settings>
- <Parameter Name="sample name">sample value</Parameter>
- </Settings> -->
- </Control>
18.3.3 在QTP中使用插件扩展的代码
这样,启动QTP之后,就可以直接使用QTP的录制功能来录制和产生ComponentOne的ToolBar控件脚本了,例如:
- SwfWindow("New document").Activate
- SwfWindow("New document").SwfObject("SwfObject").C1ToolBar_Click "&New"
- SwfWindow("New document").SwfObject("SwfObject").C1ToolBar_Click "E&xit"