QTP Web可扩展性工具包和ajax

时间:2009-07-29 11:22:41

标签: ajax qtp

我正在尝试使用QTP测试使用ajax4jsf实现ajax功能的Web应用程序。 QTP无法识别ajax何时完成。 我已经读过,QTP 9.5和QTP 10提供的Web扩展性工具包是我的问题的解决方案。 但是,我无法理解这对我有什么帮助:我需要知道httpRequest对象的就绪状态,并在状态为“完成”时继续测试。但我不知道如何从Web扩展工具包到达httpRequest。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

根据我使用AJAX调用自动测试基于Web的应用程序的经验,我建议您考虑以下事项。

  1. QTP的对象识别机制正在寻找使用Windows Handle的 GUI 对象。 因此,只要可能,只使用GUI对象。手动测试您将无法访问XmlHttpRequest对象,但它不会阻止您进行功能测试。 您仍然可以根据GUI对象的属性更改来同步各种事件。 例如。 “loading ...”图像或文字出现/消失。下拉列表停止添加新项目。按钮变为启用/禁用。

  2. 如果这是您的内部应用程序,您可以为QTP开发更友好的支持,在这里您可以使用扩展性工具包中的指南。 此外,作为测试构建选项,您可以包含GUI对象(不可见图像或文本元素),并使用它来指示AJAX事务的状态。

  3. 最后,您仍然可以直接访问DOM以访问非GUI对象,尽管我没有关于以这种方式使用XmlHttpRequest对象的信息。

  4. 谢谢你, Albert Gareev

答案 1 :(得分:2)

感谢您的回答。

我们使用QTP Extensibilty工具包设法解决了我们的问题: A4j使用在ajax之前和之后唤醒的侦听器队列(取决于侦听器的类型)。 在我们的解决方案中,我们为每个ajax组件实现了一个Jscript函数(例如webButton):
1.将globalVariable初始化为0
2.将一个新函数注册为onafterajax类型的监听器:

_elem.ownerDocument.parentWindow.A4J.AJAX.AddListener({
        onafterajax: function(req, event, data) {
            globalVariable = 1;
        }
    });
  1. 点击按钮
  2. 进入一种忙碌的等待循环:

    while (globalVariable != 1) {   
        _util.Wait(250);
    }
    
  3. 我们注册的函数在ajax完成时调用并更改globalVariable,因此while循环将退出。 我知道这很难看,但效果很好。

    我们唯一的问题是QTP 10实现_util.wait而QTP 9.5没有。没有等待,浏览器将陷入无限循环,并且永远不会调用注册的函数。 关于在Jscript中实现非忙等待等待的任何解决方案都将非常受欢迎。

答案 2 :(得分:0)

我希望您能找到以下文章。

AJAX应用程序的同步 http://relevantcodes.blogspot.com/2009/06/synchronization-for-ajax-applications.html

谢谢你, Albert Gareev