Mercury Quick Test Pro和虚拟机:可在一台客户端计算机上运行,但不能在另一台客户端计算机上运行
我有一个安装了Mercury Quick Test Professional 9.2的虚拟机(VMware)。我有一个脚本来测试应用程序,该脚本使用Infragistics库以VB.NET编写。
如果我使用笔记本电脑(使用远程桌面)访问此虚拟机,则一切正常,脚本可以顺利完成。我的笔记本电脑运行带有Windows Classic主题的XP。
如果我使用另一台计算机(使用远程桌面)访问此虚拟机,则脚本可以正常启动,但会中途停止,而QTP不会显示错误消息,则没有任何提示。本机运行带有Windows Classic主题的XP。
两种设置之间的区别是屏幕尺寸,笔记本电脑为1920x1280,其他机器为1280x1024.
脚本停止的步骤包括选中UltraWinGrid中的复选框。在这两种情况下,复选框本身都会显示在屏幕上。
有人以前有过这个问题吗,或者有任何想法为什么两台机器之间的行为不同?
谢谢。
解决方案
如果我们没有使用专家模式,和/或者允许QTP完成创建存储库对象的大部分工作,那么可以,它是按像素引用所有内容的。
我手动创建所有存储库对象,查看源代码(在自动Web应用程序测试的情况下),并在需要时使用Object Spy寻求帮助。我要指出的是,由于要运行,所以没有任何定位信息作为对象定义的一部分。
对于我的Web应用程序中与Windows交互的部分(打开要上传的文件等),对于创建用于创建存储库对象的唯一标识符的反复试验,Object Spy是必不可少的。但这是可以完成的。
例1:"文件浏览"对话框
文字="选择文件"
nativeclass =#32770(显然是某些Windows VooDoo用于文件打开对话框?)
示例2:"浏览"对话框中的"文件名"文本框:
nativeclass ="编辑"
添加的文本"文件和名称:"(更多Windows VooDoo?如果没有"&",它将对我不起作用)
范例3:对话方块中的[开启]按钮:
文字="&打开"
对象类="按钮"
祝你好运!
QTP除非最后一种选择,否则不使用屏幕坐标,如果将对象标识为高级对象(在这种情况下为" SwfTable"),则应该可以,但是,如果QTP无法识别该对象,则它会退回到WinObject和屏幕坐标。
如果我们使用的是Infragistics,那么我们应该知道他们通过其TestAdvantage产品扩展了QTP的支持,这很可能会解决问题。
In fact, we use the Infragistics plugin for QTP, and we still have the problem
编辑:
@MatthieuF说:
我们能举一个失败的例子吗?
一些东西:
我们应该能够轻松地在VM上进行调试,只需等待其停止,进入对象存储库,然后查看它是否可以识别该对象。如果否,则使用对象间谍找出操作系统之间的哪些属性不同。如果存在差异,则可以始终将该属性设置为正则表达式,并检查这两种可能性。
假设这不是问题,那么如果"远程"窗口关闭或者最小化,则将远程桌面与QTP一起使用时会遇到问题。对于我们来说,这是一个问题,其中当RDP窗口不可见时无法更改剪贴板,但是以这种方式使用QTP可能会有其他意外。
澄清点:我们提到QTP停止,没有错误消息。这是否还意味着测试结果日志文件也没有错误消息?如果日志中包含任何信息,这可能有助于诊断问题。我们可以在脚本失败的地方共享代码行吗?
同样,远程桌面将调整远程计算机上桌面的大小。尽管QTP脚本不是固有地基于坐标的,但是相对于对象,各个语句也可以基于坐标。在这方面,决议可能是一个问题。例如,假设我们在更高分辨率的机器上记录了诸如Button.Click(5,150)之类的行。但是,如果我们尝试在较低分辨率的计算机上播放它,而150在较低分辨率的对象上超出范围,则可能会引起问题。
好的。我发现了问题。实际上,脚本无声地失败了,因为编写脚本的人就是这样做的。它无法验证屏幕外的内容,因此脚本失败。
问题在于"屏幕外"的QTP定义。我的笔记本电脑上有两个屏幕,笔记本电脑本身的屏幕(1920x1200)和另一个屏幕(1280x1024)。我使用远程桌面连接到用于QTP的VM,它使用笔记本电脑的屏幕设置。这意味着,当我启动QTP脚本并将其移到另一个屏幕时,它不合适,因此该屏幕不再最大化,并且该对象部分不在屏幕上,因此找不到。
修复很简单:在"远程桌面"中,使用"显示"选项卡,并将屏幕的大小设置为1280x1024,并且QTP不再有任何问题。
段落数量不匹配