当前位置:文档之家› flex_4_testingqtp

flex_4_testingqtp

使用 HP QuickTest Professional 测试 ADOBE? FLEX? 4应用程序

上次更新2010/2/22

? 2010 Adobe Systems Incorporated. All rights reserved.

Copyright

使用 HP QuickTest Professional 测试 Adobe? Flex? 4 应用程序

If this guide is distributed with software that includes an end-user agreement, this guide, as well as the software described in it, is furnished under license and may be used or copied only in accordance with the terms of such license. Except as permitted by any such license, no part of this guide may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, recording, or otherwise, without the prior written permission of Adobe Systems Incorporated. Please note that the content in this guide is protected under copyright law even if it is not distributed with software that includes an end-user license agreement.

The content of this guide is furnished for informational use only, is subject to change without notice, and should not be construed as a commitment by Adobe Systems Incorporated. Adobe Systems Incorporated assumes no responsibility or liability for any errors or inaccuracies that may appear in the informational content contained in this guide.

Please remember that existing artwork or images that you may want to include in your project may be protected under copyright law. The unauthorized incorporation of such material into your new work could be a violation of the rights of the copyright owner. Please be sure to obtain any permission required from the copyright owner.

Any references to company names in sample templates are for demonstration purposes only and are not intended to refer to any actual organization. Adobe, the Adobe logo, Flash, Flash Builder, Flex, and Flex Builder and are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. HP is a registered trademark of Hewlett-Packard Company. ActiveX and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

All other trademarks are the property of their respective owners.

This product includes software developed by the Apache Software Foundation (https://www.doczj.com/doc/ef11029955.html,/).

This product contains either BISAFE and/or TIPEM software by RSA Data Security, Inc.

The Flash Builder 4 software contains code provided by the Eclipse Foundation (“Eclipse Code”). The source code for the Eclipse Code as contained in Flash Builder 4 software (“Eclipse Source Code”) is made available under the terms of the Eclipse Public License v1.0 which is provided herein, and is also available at https://www.doczj.com/doc/ef11029955.html,/legal/epl-v10.html.

Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA.

Notice to U.S. government end users. The software and documentation are “Commercial Items,” as that term is defined at 48 C.F.R. §2.101, consisting of “Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R.

§227.7202, as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States. For U.S. Government End Users, Adobe agrees to comply with all applicable equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans Readjustment Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts 60-1 through 60-60, 60-250 ,and 60-741. The affirmative action clause and regulations contained in the preceding sentence shall be incorporated by reference.

目录

第 1 章: 使用 QuickTest Professional

测试流程简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1测试创建概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3记录测试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5关于测试脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6关于操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7使用检查点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8使用常见方法和属性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9播放 Flex 测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

第 2 章: 高级概念

使用容器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11使用 Repeater 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11使用数据驱动且基于 List 的控件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11疑难解答. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11使用 Flex 自动测试的局限性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

第 1 章: 使用 QuickTest Professional

测试流程简介

复杂的大型应用程序必须经过测试,才可确保用户交互不会造成运行时异常,并且与数据服务的连接正常运行。

本文档假定在测试流程中有两个角色:QA 测试专业人员和 Flex 开发人员。假定 QA 测试专业人员不了解如何开发应用程序,并且无法访问 Flex 源代码、Flex 编译器或 Flex 文档。而 Flex 开发人员也未必了解如何使用测试工具,如 HP QuickTest Professional (QTP)。

适用于开发人员的 Flex 文档中,包括一组针对创建可测试应用程序的准则。这些准则包括有关下列内容的说明:如何编译可测试应用程序;如何装配自定义组件,以便可对其进行测试;如何编写应用程序,使测试流程更顺利地进行。有关指南的更多信息,请参阅使用 Adobe Flex 4。

在开始测试应用程序之前,Flex 开发人员会提供编译的 SWF 文件。开发人员还会提供内嵌此 SWF 文件的 HTML 文件,即HTML 包装器。将这两个文件以及外部加载的资源(图像或视频文件等)部署到任意 Web 服务器中。

某些应用程序需要使用 Web 服务或远程对象等外部资源,因此请确保 Web 服务器可以访问这些资源。例如,应用程序可能会调用远程服务器上的 PHP 文件,例如,https://www.doczj.com/doc/ef11029955.html,/YourFile.php。请确保可以通过测试服务器访问此 PHP 文件。

此外,可能还需要向目标服务器中添加权限文件,以便应用程序可访问此服务器。权限文件称为 crossdomain.xml 文件。有关更多信息,请咨询 Flex 开发人员。

要运行测试,请启动 QTP 并请求 HTML 包装器。QTP 将记录与应用程序的交互,方式类似于记录与其它任意目标类型的交互。只要 Web 服务器仍可以访问,就应该能够对应用程序重新运行测试。

部署 Flex 文件

在测试应用程序之前,必须先将应用程序及其支持文件部署到 QTP 可以访问的位置。这些文件包括:

?应用程序 SWF 文件

?HTML 包装器和包装器文件(包装器文件可以包含 SWF 文件、JavaScript 文件以及支持深层链接和历史记录管理等功能的其它文件)

?RSL SWC 文件

?模块 SWF 文件

?帮助器文件,如主题 SWC 文件、样式 SWF 文件及图像、视频和声音文件

将应用程序和 HTML 包装器文件部署到 HTTP 服务器上的任意位置。此位置必须能够通过 QTP 进行访问。

在某些情况下,应用程序使用的文件位于远程服务器上。此时请确保这些文件可通过任何防火墙进行访问。另外,远程服务器可能还需要包含允许远程访问的跨域权限文件。有关更多信息,请与 Flex 开发人员进行讨论。

如果需要,可对 HTML 包装器文件进行密码保护,并使用 QTP 身份验证机制对其进行访问。有关更多信息,请参阅 QTP 文档。

关于 Flex 和 AIR 加载项

要实现 Flex 对 QTP 的支持,需要在测试机上安装以下加载项:

?Flex QTP 加载项

?AIR QTP 加载项

这些加载项提供了 Flex 和 AIR 应用程序与 QTP 之间所需的通信层。使用这些插件,可确保 Adobe? Flash? Player 和 Flex 框架能够在记录模式下将合适的脚本交互发送到 QTP。

Flex QTP 加载项在 QTP 内部运行,为 QTP 提供了一种在播放过程中向 Flash Player 发送脚本命令的机制。

AIR QTP 加载项用于测试 AIR 应用程序,在 QTP 内部运行。测试 AIR 应用程序时,先启动 QTP,再启动 AIR 应用程序。

选择加载项

在启动 QTP 时,选择要使用的加载项。可以在 QTP 的“Add-in Manager”中查看可用的加载项。如果要测试 Flex 应用程序,请选择“Flex add-in”。如果要测试 AIR 应用程序,请选择“AIR add-in”。

对于使用 Flex 构建的应用程序,在“Add-in Manager”中除了选择“Flex add-in”之外,还要始终选择“Web add-in”。而对于 AIR 应用程序,则无需选择“Web add-in”。

请仅选择需要使用的加载项。不要加载测试不需要的加载项。

关于 ActiveX 浏览器插件

除了上述 QTP 加载项之外,在 QTP 中测试应用程序时,还需要使用针对 Microsoft Internet Explorer 6 或更高版本的ActiveX 浏览器插件。在运行 Flex QTP 批处理文件时会安装此插件。

此浏览器插件是已签名的 ActiveX 插件。它使用 Flash Player flash.external.ExternalInterface 类,因此需要适当的安全环境才可使 flash.external.ExternalInterface 运行。

如果 SWF 文件从 Web 服务器运行,则 Flash Player 可自动启用 flash.external.ExternalInterface。如果 SWF 文件从本地文件系统运行,则 SWF 文件必须是受信任的文件,才能启用 flash.external.ExternalInterface,并且浏览器插件才能正常运行。

如果插件在加载时出现问题,则原因会写入 Flash Player 调试日志文件中。

关于测试环境

组件名称可反映组件的性质。例如,在 Flex 编程环境中,按钮即为 Button 控件。在测试环境中,每个可测试控件的名称前缀都描述了组件的类型。

所用前缀具体取决于以下两项:编译该应用程序时所使用的应用程序(是 AIR 还是 Flex)以及该组件所属的组件集(是Halo/MX 还是 Spark)。这样可以防止脚本中来自不同应用程序类型和不同组件集的控件发生混淆。

下表介绍了这些前缀:

QTP 前缀说明示例(如 QTP 中所示)

Flex Flex 应用程序中的 MX(或 Halo)组件。FlexButton

Spark Flex 应用程序中的 Spark 组件。SparkButton

AirFlex AIR 应用程序中的 MX(或 Halo)组件。AirFlexButton

SparkAir AIR 应用程序中的 Spark 组件。SparkAirButton

这些控件虽然功能相似,但却是完全不同的控件。Spark 控件源自较新版本的 Spark 组件集。未使用 Spark 名称的控件源自较旧版本的组件集 MX(或 Halo)。有些应用程序使用单个组件集中的控件,而有些应用程序则结合使用 Spark 和 MX 控件。例如,没有与 DataGrid 控件等效的 Spark 控件。当然,这通常不会对您的测试造成影响。

在质量控制测试中,可以对大部分可视 Flex 组件编写脚本。可以对这些组件最常见的属性和方法进行记录、测试和播放。

在首次创建测试时,请注意可视控件通常是在容器内被引用的。测试环境中并不会反映 Flex 编程人员所使用的所有容器。例如,一个水平组容器(即 HGroup)中可能有一组按钮,但该 HGroup 控件可能不会出现在测试脚本中。限制脚本中的控件可使脚本更易读取,且可在不丢失详细信息的情况下,使层次结构尽可能短。

《QTP Object Type Information》文档

《QTP Object Type Information》文档 (tea.html) 中包括可以测试的 MX Flex 组件的完整列表。您可以从以下位置下载此文档:

https://www.doczj.com/doc/ef11029955.html,/go/flex3_qtp_object_type_reference

此外,该文档中还包括每个组件的可测试方法和属性。

当前不包括 Spark 组件的可测试属性和方法列表。

测试创建概述

在记录测试时,QTP 将记录与所执行的每个动作相关的测试脚本行。通常情况下,每行分别表示对屏幕上所示组件执行的一个动作。此类组件称为对象;对这些组件所执行的动作(例如单击按钮)称为操作。

测试的基本构建块是测试对象。对象存储在 QTP 对象资源库中。应了解 QTP 标识对象的方式以及将对象添加到对象资源库中的方式。有关更多信息,请参阅第7 页的“标识对象”。

要创建测试说明,可记录测试对象上的一系列操作或事件。了解 QTP 可以识别哪些事件非常重要。对于要将事件添加到每个对象的受支持事件列表中的 Flex 开发人员,请参阅《Adobe Flex4 Developer Guide》。

大多数 QTP 测试使用检查点将输出值与已知值进行比较。对于 QTP 中所使用的检查点类型,Flex 支持其中的一部分。有关更多信息,请参阅第8 页的“使用检查点”。

如果在测试应用程序时遇到问题,请参阅第11 页的“疑难解答”。该节介绍了错误代码及其含义,并介绍了结合使用 Flex 插件和 QTP 时可能发生的一些常见问题。

关于 QTP 对象模型

在创建测试之前,了解 QTP 的对象模型和 Flex 的集成方式非常重要。测试对象模型是一组对象类型,QTP 用它来表示应用程序中所使用的对象。测试对象模型可将 QTP 测试对象映射到应用程序中的 Flex 对象。例如,应用程序中的 Button 控件在QTP 对象模型中被识别为 FlexButton。

在《QTP Object Type Information》文档中,可以查看显示在 QTP 对象模型中的 Flex 对象的完整列表。此文档介绍了在使用 QTP 测试应用程序时可用的对象操作和属性。

QTP 测试对象存储属性并记录测试期间的事件。每个对象都有其自己的属性集和方法集,QTP 可以对其进行记录。测试对象并不会支持 Flex 对象中所有与其相对应的事件和属性,但它们肯定会支持与用户动作关联性最大的事件。

对象资源库是测试中使用的所有对象的列表。将一个对象添加到测试中,即将其添加到对象资源库中。将一个对象从测试中删除,即将其从对象资源库中删除。

操作是对对象所执行的动作。它们等同于 Flex 事件,但通常级别较高。例如,当您单击 Button 时,QTP 将记录“click”操作,但不会记录构成 click 事件的基本元素 mouseDown 和 mouseUp 事件。

每个操作都包含一个或多个定义事件信息的参数。此信息包括相关详细信息,例如操作发生时按住的键,或列表中选定项的索引。

当然,并非所有控件都有操作。例如,FlexRule 控件(水平线或垂直线)就没有操作。但您仍可以将这些没有操作的控件添加到对象资源库中,并使用检查点测试对象属性。其它没有操作的控件(如 FlexRepeater 和 FlexDisplayObject 控件)是低级别对象,在测试过程中通常无需与之交互。

自动测试要求每个组件都由一组永久不变的属性标识,此属性组中一个主要属性为automationName,该属性是用户可读的,并且很容易与其屏幕上的等效件关联。该属性组集体称为“自动 ID”。QTP 将“自动 ID”存储在资源库中。更改组件 ID 将导致对象在资源库中出现多个版本。另外,QA 工程师还可使用数据库中的 ID 更改这些 ID,从而创建数据驱动脚本。

QTP 尤其会避免将列表项视为组件,因为列表项的标识符可以在可编辑列表中进行更改,并且标识符可以重复(例如一个数据网格,其行之间可包含重复文本)。此外,在资源库中创建和/或请求列表项条目时,会给数据驱动脚本带来很大的负担,因为您必须将所有列表项放在资源库中,并在资源库中更改多个对象。

更多帮助主题

第3 页的“《QTP Object Type Information 》文档”

存储对象

通过 QTP ,您可以记录和播放与应用程序的交互,也可以自己编写脚本。让 QTP 记录先您对应用程序所做的操作,然后修改记录的脚本,这样做通常比较容易。在记录会话期间,QTP 将与您交互的 Flex 对象添加到对象资源库中。否则,在您在脚本中使用对象之前,必须单独定义每个对象。

在测试过程中,当 QTP 遇到 Flex 控件时,会存储一组描述该对象的属性,并将对该对象的引用存储在对象资源库中。QTP 对象资源库中对 Flex 控件的定义包含了足够的信息,使 QTP 可以将该 Flex 控件(如 Button )映射到测试对象(如

FlexButton )

。下例介绍了 QTP 资源库编辑器中的 Flex Button 控件:

A. 测试对象名称

B. 测试对象模型类

C. 用于标识此对象的 Flex 属性

D. 应用程序层次结构

在您运行测试并与 Flex 控件交互时,QTP 将执行下列操作:

1标识 Flex 对象所映射的测试对象类。

2读取对象的当前状态,并存储其说明属性和值的列表。

3指定唯一 ID ,以用于标识脚本中的对象。QTP 可以使用对象的一个或多个属性。这些属性可能基于 Flex 控件的外观(如 Button 的标签)或控件的 Flex ID 。

4

使用适当的测试对象方法,记录对该对象执行的操作。D A

C

B

在测试运行时,QTP 以名称/值对形式存储组件属性。QTP 仅将进行标识所需的属性存储在对象资源库中。这些属性包括id 和index。您可以使用检查点、数据表和其它方法存储和检索其它对象属性。这些属性可以是 TextInput 控件的文本值,也可以是 Button 控件的颜色。

关于应用程序层次结构

在对象资源库中,对象以层次结构存储。层次结构的根是浏览器。下一个元素是 Application 对象。接下来是组成应用程序的容器和控件。

在 QTP 对象资源库和关键字视图中,树形结构表示应用程序中容器的级别。层次结构通常与应用程序的直观显示结构一致。例如,在 MyApp 应用程序中,如果标记为“Submit”的 Button 位于标记为“Change Settings”的 TabNavigator 的视图中,则其层次结构如下所示:

B rowser

|

("MyApp")

Application

|

Panel ("Change Settings")

|

Button ("Submit")

在 QTP 脚本中,将使用点表示法语法访问对象,并用点分隔每个级别。要引用 Button,可使用以下路径:

B rowser("Home").FlexApplication("MyApp").FlexPanel("Change Settings").FlexButton("Submit")

有关 QTP 脚本如何显示应用程序的信息,请参阅第6 页的“关于测试脚本”。

为提高脚本的可读性,层次结构中会省略某些对测试没有影响的 Flex 容器。例如,TabNavigator 容器包含 HBox 或 Panel 等其它容器。尽管 TabNavigator 容器的每个选项卡上的容器都会显示在层次结构中,但该容器本身并不显示。

应用程序层次结构也称为显示层次结构,因为它通常使用树形布局显示屏幕上的内容。显示层次结构不会始终与自动层次结构相同,后者是 QTP 脚本中所引用的对象的层次结构。有时,屏幕上显示的容器(例如,带有边框或在窗口中的容器)是显示层次结构的一部分,而非自动层次结构的一部分。

通常情况下,如果容器没有显示在屏幕上,则它也不会显示在测试层次结构中。例如,独立 HGroup 容器通常用于对内容进行排放。HGroup 容器没有可视表示形式,通常不会显示在测试脚本中。但是当该容器是 TabNavigator 的子代时,它就会显示在测试脚本中。此时,该容器可帮助唯一标识其内容,因此它是层次结构的一部分。有关使用 TabNavigator 和其它容器的更多信息,请参阅第11 页的“使用容器”。

记录测试

要在 QTP 中记录测试,必须具有已编译的应用程序 SWF 文件和 HTML 包装器文件。主包装器文件将应用程序定义为页面上的一个对象,并将其嵌入,以便在请求该页时调用 Flash Player。您无法直接请求应用程序的 SWF 文件。您或开发人员可以编写 HTML 包装器,开发人员也可以使用编译器生成此包装器。

将 QTP 指给嵌有应用程序 SWF 文件的包装器文件。

要记录测试,可指定 QTP 在当前打开的浏览器上运行测试,或将应用程序的位置指定为 URL。在第二种情况下,QTP 将启动浏览器,并向其传递给指定的请求 URL。在“Record and Run Settings”对话框中确定要使用的方法。

通常情况下,请使用 Web 服务器将 HTML 包装器提供给 QTP 客户机。不要请求文件系统上的 HTML 包装器文件。

要使 QTP 对当前正在打开的浏览器窗口中运行的应用程序运行测试,请选择“Record And Run Test On Any Open Browser”选项。要使 QTP 打开浏览器并请求 URL,请选择第二个选项,如下例所示:

在播放测试时,QTP 将打开浏览器并请求同一个 URL。

关于测试脚本

QTP 将测试记录在对象级视图“Keyword View”和纯文本步骤视图“Expert View”中。对其中一个视图进行编辑时,QTP 将相应更新另一个视图。例如,如果您在“Expert View”中删除一个步骤,QTP 会相应地从“Keyword View”中删除该步骤。添加步骤以及添加或删除检查点的情况与此类似。

“Expert View”用 VBScript 将测试中的每个步骤都表示为一个动作。VBScript 使用点表示法将父对象与子对象分隔开。每行以一个动作结尾,后跟定义该动作的参数。

下例介绍了“Expert View”中的鼠标单击操作:

B rowser("Main Page").FlexApplication("MyApp").FlexButton("b2").Click

“Expert View”语法如下所示:

B rowser("document_title").FlexApplication("application_name").test_object("name").operation [parameters] document_title属性由 HTML 页的块中的标签定义。对于 Flex 应用程序,HTML 包装器中<TITLE>标签的默认值是指向 MXML 文件的 URL。如果页面没有标题,则 QTP 使用Browser。</p><p>app_name属性与嵌入在 HTML 页的<object>标签中的 SWF 文件的 ID 属性一样。</p><p>test_object是 Flex 控件对应的 QTP 测试对象。例如,Button 控件的 QTP 测试对象是 FlexButton。此对象采用name属性,即该对象出现在对象资源库中时的 QTP 名称。此名称通常是基于其外观(例如标签)的,但有时也与 Flex MXML 源代码中的 Flex id相同。</p><p>operation属性是由 QTP 记录的对象分派的事件。此属性可采用零个或多个参数。</p><p>操作的参数的数量和类型取决于分派事件的控件的类型。这些参数可以是在操作过程中按下的键、列表条目的索引或在文本字段中输入的文本。</p><p>例如,用户在 FlexTextArea 对象中输入字符,操作完成后即显示用户输入的文本。如果用户在 FlexTextArea 对象中输入数字 42,则“Expert View”显示的语句如下例所示:</p><!--/p9--><!--p10--><p>B rowser("Main Page").FlexApplication("MyApp").FlexTextArea("ta1").Input "42"</p><p>如果用户选择 FlexTextArea 对象中的文本,则 QTP 将记录 Select 操作。此操作采用两个逗号分隔参数。第一个参数是所选内容的开始字符位置,第二个参数是结束字符位置。如果用户选择 FlexTextArea 对象中的前四个字符,则“Expert View”显示的语句如下例所示:</p><p>B rowser("Main Page").FlexApplication("MyApp").FlexTextArea("ta1").Select 0,3</p><p>标识对象</p><p>测试对象是 QTP 中测试脚本的构建块。测试中使用的每个对象都存储在对象资源库中。Flex 控件将映射到这些 QTP 测试对象。</p><p>记录测试时,QTP 会将与您交互的所有对象添加到对象资源库中。QTP 根据对象在脚本中的测试对象名称引用该对象。QTP 使用的标识符是测试对象在资源库中的name属性。此属性有时与 Flex 开发人员在 Flex 应用程序源代码中指定的 Flex id相同。例如,Flex id为“myCombo”的 ComboBox 控件存储在对象资源库中时名为 myCombo。在 QTP 脚本中,对其引用的方式如下例所示:</p><p>F lexComboBox("myCombo")</p><p>但在脚本中,Flex 对象并不总是由其 Flex id属性标识。大多数情况下,测试对象名称与屏幕上显示的名称一致。例如,FlexButton 对象的 QTP 测试对象名称是对象的label属性的值,而非id属性的值。例如,以下 FlexButton 在 QTP 对象资源库中标识为“Click Me”:</p><p>在 QTP 专家视图中,引用该 FlexButton 对象的方式如下例所示:</p><p>F lexButton("Click Me")</p><p>如果 FlexButton 对象没有标签,则 QTP 会使用 Button 的工具提示作为测试对象名称。如果没有标签,也没有工具提示,则QTP 会使用源代码的id属性。如果 Flex 开发人员未指定id,则 QTP 将使用索引。如果省略了以上所有内容,则 QTP 会使用自己的编号方案来标识对象。</p><p>用于确定测试对象名称的属性排序随对象的不同而不同。测试对象名称与 Flex id属性不同的其它对象包括FlexAccordionHeader、FlexButtonBarButton、FlexCheckBox、FlexLink、FlexPopUpButton、FlexRadioButton、FlexScrollThumb、FlexSimpleButton、FlexSliderThumb 和 FlexTab。</p><p>关于操作</p><p>记录期间与应用程序交互时的动作将存储在 QTP 脚本中。这些动作(如单击按钮)可定义测试脚本的说明,在 QTP 中称为操作,在 Flex 中称为事件。每个操作定义一个与应用程序中的控件的交互。通常情况下,可以使用一组操作执行与应用程序的复杂交互。这些操作包括填写和提交表单,将多个对象拖放到特定位置等。</p><p>Flex 控件(如按钮)可定义许多事件。这些事件包括一些常见事件,例如click、showToolTip和focusIn。还包括用户交互很少或从不直接调用的事件,例如creationComplete、render和invalid。此外,Flex 控件还分派比大多数测试所需的事件更精细的事件,包括mouseMove、keyDown和focusOut。</p><p>最常用的 Flex 事件可作为操作在 QTP 中使用。但是,QTP 不会记录所有事件,而是记录语义上较重要的动作或逻辑上较小的操作。例如,在 ComboBox 控件中选择某项时,QTP 仅记录open和select事件,而不会记录mouseDown、open、drag、mouseUp和close事件序列。</p><!--/p10--><!--p11--><p>某些事件已被完全排除,但您仍可以手动将其添加到播放脚本中。例如,默认情况下不会记录 FlexApplication 对象的mouseMove事件。如果记录了该事件,则脚本将包含新步骤中鼠标移动的每个像素,这将很快塞满整个测试。可以将该事件手动添加到测试脚本中,然后指示 QTP 播放。要查看每个 Flex 组件的可用操作列表,请参阅《QTP Object Type Information》文档,该文档可从以下位置获得:</p><p>https://www.doczj.com/doc/ef11029955.html,/go/flex3_qtp_object_type_reference</p><p>在某些情况下,QTP 以较小事件序列的形式播放用户动作。例如,可以按mouseDown和mouseUp事件对或keyDown和keyUp事件对的形式播放 click 事件,具体取决于该事件的调用方式。</p><p>QTP 会为每个操作存储一组定义相应操作各个方面的参数。这些参数包括单击鼠标时按下了哪些键,或拖放操作中目标的 X 和 Y 的位置。操作参数也会记录交互的源位置,例如,是源自键盘还是鼠标。</p><p>在记录对 Flex 控件所做的操作时,QTP 会记录操作的执行方式。QTP 会记录事件是由鼠标还是键盘引起的,因为每种情况下的播放方式不同。例如,当使用鼠标单击按钮时,将分派下列事件:mouseDown、mouseUp和click。但是,在按钮具有焦点的情况下,如果是通过按下空格键单击该按钮,则分派的事件为:keyDown、keyUp和click。</p><p>为了使脚本更易于读取,Flex 插件将脚本中记录的事件参数的数量降至最低。为了减少对常见信息的记录,对于每个操作,QTP 都有一个默认参数。Button 单击的交互类型的默认值是“mouse”。如果操作参数与默认值相同,则 QTP 将不对其进行记录。例如,QTP 不记录:</p><p>F lexButton("buttonId").Click "mouse"</p><p>而是仅记录:</p><p>F lexButton("buttonId").Click</p><p>默认动作是鼠标单击,因为在大多数情况下 FlexButton 单击是使用鼠标而非键盘执行的。</p><p>使用检查点</p><p>通过检查点,可以检查对象,并根据对象是否包含期望值来判断测试是成功还是失败。在测试期间,QTP 将当前值与检查点中的期望值进行比较。如果值不一致,则测试失败。如果值一致,则测试成功。</p><p>Flex QTP 插件支持的检查点类型如下:</p><p>?位图</p><p>?标准</p><p>?表</p><p>Flex QTP 插件不支持的检查点类型如下:</p><p>?可访问性</p><p>?数据库</p><p>?图像</p><p>?页面</p><p>?文本</p><p>?XML</p><p>标准检查点</p><p>标准检查点用于检查控件属性。可以用于检查对象资源库中的任何 Flex 对象。可测试属性包括对象状态(如 TextArea 文本属性)相关信息和对象外观(如color样式属性或height和width属性)相关信息。</p><!--/p11--><!--p12--><p>可用属性是 Flex 控件的完整属性集的一部分,包括最常用的属性。有关这些属性的完整列表,请参阅《QTP Object Type Information》文档。</p><p>下例介绍了使用检查方法的部分脚本,该方法可验证某一项的真实值与期望值是否一致:</p><p>B rowser("FlexStore").FlexApplication("flexstore").FlexCanvas("Support").</p><p>FlexForm("index:4").Check</p><p>CheckPoint("index:4")</p><p>有关更多信息,请参阅《QuickTest Professional Object Model Reference》。</p><p>位图检查点</p><p>在使用位图检查点时,请确保考虑 Flex 对象的外观差异。之所以产生这些差异,可能是因为测试对象上的 Tab 键焦点,或对象对mouseOver事件的反应不同所致。如果在应用程序的某个区域(其中某个对象具有焦点,且该对象周围有光晕效果)上添加位图检查点,则请确保在测试期间此对象具有焦点。</p><p>下例介绍没有焦点的 FlexButton 测试对象、具有焦点的 FlexButton 及鼠标悬浮在上方的 FlexButton 之间的差异:</p><p>FlexImage 对象永远不会明显具有焦点,因此如果使用位图检查点检查图像,则不会出现上述问题。</p><p>表检查点</p><p>表检查点用于检查基于 List 的控件和容器中的属性。可对所有基于 List 的 Flex 控件使用表检查点,这些控件包括 List、DataGrid、TileList 和 Tree 控件。也可对所有容器使用表检查点,这将为这些容器包含的所有子代生成automationValues列表。</p><p>使用常见方法和属性</p><p>Flex 测试对象支持所有 QTP 测试对象常见的方法和属性。常见方法如下:</p><p>?CaptureBitmap</p><p>?Check</p><p>?CheckProperty</p><p>?ChildObjects</p><p>?GetROProperty</p><p>?GetTOProperty</p><p>常见属性如下:</p><p>?Exist</p><p>?Object</p><p>在“Keyword View”或“Expert View”中,可以使用常见方法和属性。下面的 Expert View 示例使用CheckProperty()方法检查是否将 myList 控件的visible属性设置为false:</p><p>B rowser("My Page").FlexApplication("MyApp").FlexCheckBox("myList").CheckProperty "visible", false</p><p>有关所有 QTP 测试对象的常见方法和属性的信息,请参阅《QTP Object Model Reference》。</p><!--/p12--><!--p13--><p>播放 Flex 测试</p><p>播放测试时,无需打开浏览器。QTP 会启动浏览器。您必须有从 QTP 请求的生成的 HTML 包装器。不要直接请求应用程序的 SWF 文件。</p><p>在某些情况下,播放可能无法按预期运行。此情况大多数是由于同步造成的。例如,某个效果的播放时间可能比 QTP 预期长,意味着在该效果仍在播放时,QTP 可能已移至脚本中的下一个步骤。如果使用异步方法获取数据(例如 Web 服务调用),则可能会出现另一个问题。即使尚未从·Web 服务操作接收到数据,脚本也将继续运行。</p><p>上述问题的解决方法包括插入 wait 语句,或在继续执行之前检查是否存在对象。有关更多信息,请参阅第13 页的“解决播放同步问题”。</p><!--/p13--><!--p14--><p>11上次更新2010/2/22</p><p>第 2 章: 高级概念</p><p>使用容器</p><p>HP QuickTest Professional (QTP) 通常能够减少测试脚本中有关嵌套控件的详细信息量。它将从脚本中删除对测试结果或对</p><p>控件标识没有影响的容器。此规则适用于专用于布局的容器(例如 HGroup、VGroup、HBox、VBox 和 Canvas 容器),</p><p>但当这些专用于布局的容器用在 ViewStack、TabNavigator 或 Accordion 容器中时除外,在这些情况下,这些容器将被添</p><p>加到层次结构中,以提供导航。</p><p>使用嵌套容器时,需要谨防 ID 冲突。含有多个选项卡的容器(如 Accordion 和 TabNavigator 容器)可能在多个选项卡上</p><p>拥有同一标签。这些容器的 ID 派生自选项卡标签,因此,可能会有重叠 ID。</p><p>除非您对某个布局容器执行事件,否则 QTP 不会在脚本中记录相应的布局容器。此操作可防止测试对象嵌套过深,从而使测</p><p>试脚本更易读取。</p><p>有关应用程序层次结构的更多信息,请参阅第5 页的“关于应用程序层次结构”。</p><p>使用 Repeater 对象</p><p>Repeater 对象在 QTP 对象层次结构和脚本中可见,且包含它们已创建的子对象。在实际应用程序中,这些子对象是主容器的</p><p>子代,而非 Repeater 对象的子代。QTP 表检查点中同时考虑这两种模型;子对象显示为容器和 Repeater 对象的子代。</p><p>使用数据驱动且基于 List 的控件</p><p>要正确使用自动化,基于 List 的控件的自定义项呈示器对象必须是数据驱动的。为了生成表检查点,会将数据推送到单个项呈</p><p>示器,然后查询值。如果项呈示器不是数据驱动的,则生成的值不正确。</p><p>如果基于 List 的控件中的显示数据在各个测试之间有所变化,请使用基于索引的方法进行记录。在这种情况下,基于值的记录</p><p>操作将无法进行。</p><p>疑难解答</p><p>使用 QTP 测试应用程序时,会遇到一些常见的问题,我们已经提供了相应的解决方案。某些常见问题可通过检查下列内容来</p><p>解决:</p><p>?开发人员应该在编译过程中使用include-libraries标志将 automation.swc、automation_agent.swc 和 qtp.swc 文件链接到应用程序中。(您可以通过比较包含和不包含库的 SWF 文件大小,来确定是否包含这些库。用这些库编译的应用程序会比较大。)</p><p>?使用 Process Explorer(位于</p><p>https://www.doczj.com/doc/ef11029955.html,/technet/sysinternals/Processesandthreadsutilities.mspx)确定是否已加载</p><p>TEAPluginIE.dll 和 TEAPluginQTP.dll。开始记录后即搜索这些 DLL。如果仅加载了 TEAPluginQTP.dll,而未加载TEAPluginIE.dll,则 IE 安全性设置可能有问题。TEAPluginIE 需要启用 QTP 代理使用的 ActiveX 控件。</p><p>?查看 Flash Player 日志文件。该文件位于 C:\Documents and Settings\user_name\Application Data\Macromedia\Flash Player\Logs,其中 user_name 是当前 Windows 用户名。检查是否有任何错误字符串。</p><!--/p14--><!--p15--><p>常见疑难解答</p><p>其它常见问题的解决方法是,确保环境和应用程序信息符合下面所有项:</p><p>?已安装 Flash Player 9 或更高版本的调试器版本的 ActiveX 版本。</p><p>?已安装 Flex 或 AIR QTP 加载项。在 QTP 中的可用加载项会在启动时列出。</p><p>?应用程序是在 Flex 3 或更高版本中,使用支持自动测试的最新 frameworks.swc 文件编译的。</p><p>?应用程序可在 Microsoft Internet Explorer 版本 6 或更高版本中运行。</p><p>?应用程序通过带有设置了id属性的<object>标签的 HTML 页(即包装器)加载。id属性不包含句点或连字符。</p><p>?应用程序是从 Web 服务器或受信任的本地 SWF 文件加载的。</p><p>要确定所需应用程序的版本是否正确,请转到“添加或删除程序”控制面板,查看当前已安装的程序列表。</p><p>如果 QTP 未记录与应用程序的交互,请确定是否安装了加载项和插件。常见问题如下:</p><p>?Flash Player 版本不正确。需要安装版本 9 或更高版本。</p><p>?Internet Explorer 版本不正确。需要安装版本 6 或更高版本。</p><p>?Internet Explorer 已禁用插件。QTP 需要使用 ActiveX 插件。</p><p>?尚未安装 QTP ActiveX 插件(应该已使用 Flex 和 AIR 插件加载此插件)。</p><p>?尚未安装 Flex 和 AIR QTP 加载项。</p><p>?系统中不存在 Flex 插件依赖的 DLL。这些 DLL 包括 MSVCR71.DLL 和 MSVCP71.DLL。</p><p>确定问题的方法如下:</p><p>?在 QTP 的“Add-ins Manager”中查看已安装的加载项列表。</p><p>?查看日志文件。有关更多信息,请参阅第12 页的“使用 Flash Player 调试器版本进行记录”。</p><p>记录事件</p><p>在使用 QTP 记录事件时,可能会遇到下列问题:</p><p>?如果 QTP 不记录任何事件,请确保在未使用运行时加载时,已使用自动库编译了应用程序。要求 Flex 开发人员重新编译应用程序。</p><p>?单击某个组件时,click 事件可能会记录在其它组件上。出现此问题的原因是,所需组件可能属于某个组合对象。包含对象未正确公开其子代,或者所有者属性设置不正确。</p><p>记录</p><p>为了帮助确定问题的根源,可以查看 Flash Player 和 QTP 日志文件。</p><p>使用 Flash Player 调试器版本进行记录</p><p>Flash Player 调试器版本可将插件和 ActionScript 错误写入到 flashlog.txt 文件中。默认情况下,此文件位于 C:\Documents and Settings\user_name\Application Data\Macromedia\Flash Player\Logs,其中 user_name 是当前 Windows 用户名。</p><p>要启用记录功能,请使用 Flash Player 调试器版本。可能需要配置 mm.cfg 才能启用记录功能。有关更多信息,请参阅《使用Flex 4》。</p><p>使用 QTP 进行记录</p><p>可将 QTP 记录配置为记录与应用程序测试相关的 QTP 错误。然后再查看 QTP 日志文件,确定可能的问题根源。</p><!--/p15--><!--p16--><p>启动记录 QTP 日志文件功能</p><p>1打开命令行对话框。</p><p>2转到 QTP bin 目录。默认位置是:C:\Program Files\HP\QuickTest Professional\bin。</p><p>3对于 QTP 9.2 和更低版本,请运行 MicLogSetting.exe。对于 QTP 9.5 和更高版本,请运行 ClientLogs.exe。此时将出现日志设置对话框。</p><p>4对于 QTP 选项,请从“Available Categories”列表中选择“LogCatPackTEA”和“LogCatPackTE”。单击向右箭头按钮,将这些类别移至“Selected Categories”列表中。</p><p>5提高每个类别的日志级别。对于 QTP 9.5 和更高版本,请将“Category Level”设置为“Debug2”。</p><p>6输入日志文件的存储路径。</p><p>7单击“OK”,保存对 QTP 日志级别所做的更改。</p><p>8运行 QTP。照常记录与应用程序的交互。</p><p>9关闭 QTP。</p><p>10在 QTP 日志文件中检查可能会存在的问题。</p><p>QTP 生成的日志文件位于在日志设置对话框中指定的位置。要确保插件是否正在运行,请查看日志中是否包含以下文本:</p><p>R ead Flex environment and matching ProgId TEAPluginQTP.TEAFlexAgentQTP</p><p>注:QTP 日志文件的大小可能非常大。可以限制对日志文件的使用,只有在遇到其它方法无法解决的错误时才可使用日志文件。</p><p>解决播放同步问题</p><p>在某些情况下,播放的测试脚本与屏幕上显示的内容不同步。例如,在开始测试对象之前,QTP 不会等待效果完成或返回数据结果。这样可能会导致 QTP 记录错误,例如:</p><p>?脚本播放不一致。</p><p>?遇到“未指定的错误”。</p><p>?脚本在不应该出错的位置出错。</p><p>向脚本中添加 wait 语句</p><p>可以使用 wait 语句使脚本播放暂停几秒。可将 wait (num_seconds) 语句作为参数传递到脚本中要暂停的操作中。</p><p>在下例中,在单击 Milk FlexCheckBox 控件之前,会等待 10 秒:</p><p>B rowser("My Page").FlexApplication("MyApp").FlexCheckBox("Milk").Click Wait(10)</p><p>有关使用 wait 语句的更多信息,请参阅 QTP 文档。</p><p>检查对象是否存在</p><p>可以在对某个控件执行操作之前,检查该对象是否存在。要执行此操作,可使用 Exist 语句。下例在单击 Milk FlexCheckBox 控件之前,检查该控件是否存在:</p><p>I f Browser("My Page").FlexApplication("MyApp").FlexCheckBox("Milk").Exist Then</p><p>Browser("My</p><p>Page").FlexApplication("MyApp").FlexCheckBox("Milk").Click</p><p>E nd If</p><p>还可检查控件上 Exist 常见属性的值。有关使用 Exist 语句或 Exist 常见属性的更多信息,请参阅 QTP 文档。</p><!--/p16--><!--p17--><p>放慢全局播放时间</p><p>通过设置全局执行延迟,可将 QTP 配置为慢速播放所有事件。此方法应作为最后一种方法使用。首先,按照第13 页的“向脚本中添加 wait 语句”中所述,尝试在测试问题点之前插入 wait 语句。在非常大的测试脚本中,增加每个事件的触发时间(即使是一瞬间)会大大增加测试的总运行时间。因此,请尝试找出脚本正确运行所需时间的最低可能值。</p><p>如果选择添加全局延迟,请将 QTP 配置为将脚本中的每一步都延迟几毫秒,然后逐渐增加此值,直到不再出现任何错误为止。</p><p>在测试的每一步中添加延迟</p><p>1选择“Tools”>“Options”。</p><p>2在“Options”对话框中,选择“Run”选项卡。</p><p>3对于“Run mode”,选择“Normal”选项。这是默认选项。</p><p>4将“Delay Each Step Execution By”选项的值增加到特定毫秒数。默认值为 0。</p><p>5单击“OK”,并保存更改。</p><p>6重新运行测试。如果问题仍未解决,请增加延迟量,并重新运行测试。</p><p>延迟启动测试时间</p><p>如果 QTP 在浏览器中启动应用程序时您更改或重新编译此应用程序,请延迟浏览器启动后启动测试的时间。如果测试立即启动,但应用程序还未完成对其所有对象的实例化,QTP 可能会记录失败。</p><p>延迟测试的启动</p><p>1选择“Tools”>“Options”。</p><!--/p17--><!--p18--><p>2在“Options”对话框中,选择“Web”选项卡:</p><p>3将“Add n Seconds To Page Load Time”选项的值增加到确保应用程序在 QTP 开始运行测试前完成编译。默认值为 10。</p><p>使测试失败但继续完成测试</p><p>您可能遇到这样一些情况:无法通过脚本使测试失败或成功,但仍然继续完成测试。具体而言,对于更改数据表内的公式的测试,已报告出现过此情况。</p><p>要编写可导致测试失败但又继续完成测试的 QTP 方法,可创建一个关键字,如下例所示:</p><p>P ublic Function WidthGreaterThan(test_object, minWidth)</p><p>a ctual = test_object.GetROProperty("width")</p><p>a = CInt(actual)</p><p>b = CInt(minWidth)</p><p>I f a > b Then</p><p>M sg = "WidthGreaterThan", "Width is greater than: " &minWidth</p><p>R eporter.ReportEvent micPass, Msg</p><p>E lse</p><p>M sg = "Width " & actual & " is not greater than " & minWidth</p><p>R eporter.ReportEvent micFail, "WidthGreaterThan", Msg</p><p>End</p><p>If</p><p>E nd Function</p><p>R egisterUserFunc "FlexButton", "WidthGreaterThan", "WidthGreaterThan"</p><p>B rowser("FlexStore").FlexApplication("flexstore").FlexCanvas("Products").</p><p>FlexButton("Remove from cart_11").WidthGreaterThan 10</p><p>B rowser("FlexStore").FlexApplication("flexstore").FlexCanvas("Products").</p><p>FlexButton("Remove from cart_11").WidthGreaterThan 1099</p><p>B rowser("FlexStore").FlexApplication("flexstore").FlexCanvas("Products").</p><p>FlexButton("Remove from cart_11").WidthGreaterThan 100</p><!--/p18--><!--p19--><p>使用 Flex 自动测试的局限性</p><p>Flex 与 QTP 集成有以下局限性:</p><p>?Flex 测试对象不会出现在“Object Identification”(“Tools”>“Object Identification”)对话框中。因此,通常不要配置QTP 获取对象id的方法或自定义 QTP 存储的属性。您可配置 Flex 用于标识 TEAFlex.xml 文件中对象的属性。?“Web”设置(“Tools”>“Web Event Recording Configuration”)不适用于 Flex 应用程序。在该选项中,您可以指定鼠标事件的敏感度(例如,指示 QTP 连续记录mouseDown操作和mouseUp操作,而非click操作)。</p><p>?Flex 测试对象不在“QuickTest Object Model Reference”(“Help”>“QuickTest Professional Help”>“Contents”选项卡 >“QuickTest Object Model Reference”)中。此参考显示了所有可测试的方法和属性、示例以及标识属性列表。</p><p>您可以参考 tea.html 文件,该文件介绍了 Flex 测试对象(或 MX 控件)及其事件和事件值。有关更多信息,请参阅第3 页的“《QTP Object Type Information》文档”。</p><!--/p19--> <div> <div>相关主题</div> <div class="relatedtopic"> <div id="tabs-section" class="tabs"> <ul class="tab-head"> </ul> </div> </div> </div> <div class="container"> <div>文本预览</div> <div class="textcontent"> </div> </div> </div> <div class="category"> <span class="navname">相关文档</span> <ul class="lista"> </ul> <span class="navname">最新文档</span> <ul class="lista"> <li><a href="/doc/0619509601.html" target="_blank">幼儿园小班科学《小动物过冬》PPT课件教案</a></li> <li><a href="/doc/0a19509602.html" target="_blank">2021年春新青岛版(五四制)科学四年级下册 20.《露和霜》教学课件</a></li> <li><a href="/doc/9619184372.html" target="_blank">自然教育课件</a></li> <li><a href="/doc/3319258759.html" target="_blank">小学语文优质课火烧云教材分析及课件</a></li> <li><a href="/doc/d719211938.html" target="_blank">(超详)高中语文知识点归纳汇总</a></li> <li><a href="/doc/a519240639.html" target="_blank">高中语文基础知识点总结(5篇)</a></li> <li><a href="/doc/9019184371.html" target="_blank">高中语文基础知识点总结(最新)</a></li> <li><a href="/doc/8819195909.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/8319195910.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/7b19336998.html" target="_blank">高中语文基础知识点总结大全</a></li> <li><a href="/doc/7019336999.html" target="_blank">超详细的高中语文知识点归纳</a></li> <li><a href="/doc/6819035160.html" target="_blank">高考语文知识点总结高中</a></li> <li><a href="/doc/6819035161.html" target="_blank">高中语文知识点总结归纳</a></li> <li><a href="/doc/4219232289.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/3b19258758.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/2a19396978.html" target="_blank">高中语文知识点归纳(大全)</a></li> <li><a href="/doc/2c19396979.html" target="_blank">高中语文知识点总结归纳(汇总8篇)</a></li> <li><a href="/doc/1619338136.html" target="_blank">高中语文基础知识点整理</a></li> <li><a href="/doc/e619066069.html" target="_blank">化工厂应急预案</a></li> <li><a href="/doc/b019159069.html" target="_blank">化工消防应急预案(精选8篇)</a></li> </ul> </div> </div> <script> var sdocid = "e93d7fef856a561252d36f24"; </script> <script type="text/javascript">bdtj();</script> <footer class="footer"> <p><a href="/tousu.html" target="_blank">侵权投诉</a> © 2022 www.doczj.com <a href="/sitemap.html">网站地图</a></p> <p> <a href="https://beian.miit.gov.cn" target="_blank">闽ICP备18022250号-1</a>  本站资源均为网友上传分享,本站仅负责分类整理,如有任何问题可通过上方投诉通道反馈 <script type="text/javascript">foot();</script> </p> </footer> </body> </html>