我有一种情况,浏览器状态= done,但仍未加载页面。
qtp可以等到页面完全加载后,是否有一个通用的程序?
我尝试使用objBrowzer.sync,objPage.Sync,objPage.waitproperty“readyState”,“completed”,50。
但这并不总是有效。

我什至只能等待语句,直到它出现为止。因为在不同情况下,存在不同的对象。
是否有任何适用于所有情况的通用声明?

提前致谢。

最佳答案

您刚刚发现QTP不提供任何与异步浏览器脚本执行同步的显式支持,就像AJAX驱动的网站一样。当QTP认为页面已完全加载时,实际上仍在运行JavaScript处理程序,可能会更新用于页面的HTML,并且QTP会尽早访问GUI。
readyState是一个好主意,但通常,很容易找到效果不佳的情况。

1.最佳解决方案是在应用程序的“忙”指示器上进行同步,例如进度条或事件指示器。

不幸的是,等待忙碌指示符总是总是表示忙碌指示符确实出现,但是许多应用程序仅在该过程花费足够长的时间(超过2秒等)时才显示一个。然后,这很快变得比预期的更困惑。

2.如果应用程序没有这样的内容,通常您可以通过同步一些“就绪”指示符来帮助自己,例如“出现预期字段”或“确定按钮消失”。如果没有真正的“就绪”指示符(通常不存在),这通常需要针对每个上下文的特定解决方案。

3.在许多项目中,自动化人员可以为他们构建内置在应用程序中的繁忙指示器。 虽然这不会为开发人员带来很多工作(因为现代应用程序具有中央消息分派(dispatch)器,所以可以轻松地从中央跟踪从“忙”到“空闲”状态和vv的过渡),但它极大地简化了工作量同步所需。

因此,如果可能,请尝试与开发人员联系,并让他们呈现一个属性(可变的,内存映射的文件,信号量,无论他们喜欢什么),测试机器人的“synch”例程可以轻松地对其进行轮询。 (提示:即使在“丢失”两个状态之间的“繁忙”状态之后,也能够在两个“就绪”状态之间进行区分,除了“繁忙状态标志”之外,获得顺序的“繁忙状态计数”可能也会有所帮助,因此您可能会在同一场合提出要求。)然后,所有同步问题都是应用程序中的一个缺陷,因为它显然无法正确维护就绪信号。

更新对于基于事实上的“标准”框架的应用程序,人们可能会找到一种以通用方式实现同​​步的方法。

例如,对于JavaScript应用程序,我设法创建了一种将事件流透明地报告给QTP的工具,该工具用于在其中等待“足够长的时间”,从而使人们能够设置类似检查点的特殊库调用来等待某些事件(尤其是“点击”,对于执行AJAX的Java Server Pages的应用,“ajaxstop”事件)必须在继续操作之前完成。

事实证明,这非常有用,因为使开发人员实现对测试自动化需求的任何形式的支持通常非常复杂,并且如果应用程序基于GUI的同步(仅通过测试对象状态/存在)有时是不够的。在后台执行异步请求。它还消除了为每个GUI上下文探索同步选项的需求,这可能非常耗时和/或不可靠。

10-08 01:21