我有一个场景,其中浏览器状态=已完成,但仍未加载页面.是否有一个常见的过程,qtp可以等到页面完全加载?我尝试使用objBrowzer.sync,objPage.Sync,objPage.waitproperty"readyState","completed",50.但它总是不起作用.
我甚至不能等待一个等待声明,以便等到该对象出现.因为在不同的情况下,存在不同的对象.是否有任何通用声明适用于所有情况?
提前致谢.
您刚刚发现QTP没有为与 AJAX驱动的网站的异步浏览器脚本执行同步提供任何明确的支持.当QTP认为页面已经完全加载时,实际上仍然有JavaScript处理程序在运行,可能会更新用于页面的HTML,而QTP会提前访问GUI.
readyState 这是一个好主意,但通常很容易找到那些效果不好的情况.
1.最佳解决方案是同步应用程序的"忙"指示器,如进度条或活动指示器.
不幸的是,等待忙碌指示器意味着忙碌指示器确实会出现,但是许多应用程序仅在过程需要足够长时间(超过2秒等)时显示一个.然后,这很快变得比预期的要乱.
2.如果应用程序没有这样的东西,通常你可以通过同步一些"就绪"指示器来帮助自己,比如"预期的字段出现"或"确定按钮消失".如果没有真正的"就绪"指标(通常不存在),这通常需要针对每个上下文的特定解决方案.
3.在许多项目中,自动化人员可以为应用程序内置一个繁忙的指示器.虽然这不会给开发人员带来很多努力(因为现代应用程序有一个中央消息调度程序,因此可以轻松地集中跟踪"忙"到"空闲"状态和vv的过渡),这大大简化了所需的工作量用于同步.
因此,如果可能的话,尝试联系开发人员并让他们看到测试机器人"同步"例程可以轻松轮询的属性(变量,内存映射文件,信号量,他们喜欢的任何东西).(提示:为了能够区分两个"就绪"状态,即使在"丢失"两者之间的"忙"状态之后,除了"忙状态标志"之外,获得顺序"忙状态计数"可能会有所帮助. ,因此您可能会在同一场合请求.)然后,所有同步问题都是应用程序中的缺陷,因为它显然没有正确维护就绪信号.
更新对于基于事实上的"标准"框架的应用程序,可以找到以通用方式实现同步的方法.
例如,对于JavaScript应用程序,我设法创建一个透明地向QTP报告事件流的检测,在那里使用它等待"足够长",使人们可以设置等待特定检查点的库调用等待某些事件(尤其是"点击",对于在继续之前完成AJAX往返式Java服务器页面,"ajaxstop",事件)的应用程序.
这被证明是非常有用的,因为通常,开发实现任何类型的测试自动化需求支持是非常复杂的,并且基于GUI的同步(仅通过测试对象状态/存在)有时是不够的,如果应用程序在后台执行异步请求.它还消除了为每个GUI上下文探索同步选项的需要,这可能非常耗时和/或不可靠.