5

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

4

2 回答 2

2

根据我使用 AJAX 调用对基于 Web 的应用程序进行自动化测试的经验,我建议您考虑以下几点。

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

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

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

谢谢你,阿尔伯特加里耶夫

于 2009-07-30T13:42:01.053 回答
2

谢谢您的回答。

我们确实设法使用 QTP Extensibilty 工具包解决了我们的问题:A4j 使用在 ajax 之前和之后唤醒的侦听器队列(取决于侦听器的类型)。在我们的解决方案中,我们为每个 ajax 组件(例如 webButton)实现了一个 Jscript 函数:
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);
    }
    

我们注册的函数在 ajax 完成并更改 globalVariable 时调用,因此 while 循环将退出。我知道这很难看,但效果很好。

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

于 2009-08-05T06:38:50.423 回答