QTP Web扩展工具包和ajax

QTP Web扩展工具包和ajax,ajax,qtp,Ajax,Qtp,我正在尝试使用QTP测试一个web应用程序,它使用ajax4jsf来实现ajax特性。 QTP无法识别ajax何时完成。 我已经读到QTP 9.5和QTP 10提供的web扩展性工具包是解决我问题的解决方案。 但是,我不明白这对我有什么帮助:我需要知道httpRequest对象的就绪状态,并在状态为“完成”时继续测试。但是我不知道如何从web扩展性工具包中访问httpRequest。 任何帮助都会被理解。 < P>基于我的基于Ajax调用的基于Web的应用程序的自动化测试的经验,我建议您考虑以下

我正在尝试使用QTP测试一个web应用程序,它使用ajax4jsf来实现ajax特性。 QTP无法识别ajax何时完成。 我已经读到QTP 9.5和QTP 10提供的web扩展性工具包是解决我问题的解决方案。 但是,我不明白这对我有什么帮助:我需要知道httpRequest对象的就绪状态,并在状态为“完成”时继续测试。但是我不知道如何从web扩展性工具包中访问httpRequest。
任何帮助都会被理解。

< P>基于我的基于Ajax调用的基于Web的应用程序的自动化测试的经验,我建议您考虑以下内容:

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

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

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

  • 谢谢,,
    阿尔伯特·加雷夫谢谢你的回答

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

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

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

    我们唯一的问题是QTP10实现了_util.wait,而QTP9.5没有。如果没有等待,浏览器将陷入无限循环,注册的函数将永远不会被调用。 任何关于在Jscript中实现非繁忙等待的解决方案都将不胜感激