前面讲到要做一体化自动化测试框架,那么,最重要的是要解决什么呢?
相信了解Windows编程的人员,都能发现这个问题所在。在窗体中,写下代码,控制每一个控件的输入是非常简单的事。但是,一旦显示了一个模态窗体,原有的流程代码会不再往下执行,而是停留在新窗体中,等待消息相应。这就是我们代码控制界面的关键问题。
这是什么道理呢?
我使用的是Delphi系统,所以我可能使用VCL框架来解释这个问题。但是其他语言同样适用。
在Windows程序中,WinMain是入口。而WinMain的处理,就是一个典型的死循环,先从消息队列中取出消息,然后再给各窗体派发消息。
为了方便理解,我们将这个模型简化,就是一个死循环A。中间在处理任意的代码。
现在,由于调用了某一段处理,进入了另外一个死循环B。当代码从A函数进入了B,那么当然,A循环下面的代码当然只能停留下来,直到B循环结束。
而在Windows界面中,模态窗体就是一个消息死循环。当Windows弹出一个模态窗体的时候,其消息队列独立处理,不再走整个应用程序的消息循环。
现在比较明白了,不能方便控制界面的原因在于Windows应用程序并不是流程化的,而是消息驱动的。
明白了这个道理,就有可能找到突破口。我想到了钩子。在Delphi中使用钩子,推荐使用FastCode。
既然程序从A循环进入到B循环,我不能继续执行A循环的代码,那么,可不可以在进入B循环后,继续执行A的代码呢?
这应该是可行的。关键在于我必须做到B循环中,能够调用到我的代码。
在Delphi的一般窗体,你可以通过使钩子Hook住TForm的DoShow方法。那样,窗体不管是否是ShowModal的,都会触发,然后通过给此窗体发送一个特殊消息,并在此窗体中,使用钩子,处理此消息。那么就可以在窗体完全显示之后,真正处理你的任务了。这里有一个技巧,窗体真正显示,并不是调用DoShow的时候,而是经过Windows的消息循环,完全处理好所有显示相关消息之后。这里,通过消息循环机制,给它发送一个额外消息,那么可以保障,触发你的任务的时机,是在窗体处理完原有消息之后。
当然了,在VCL中,并不是这么简单就能处理所有问题。最主要的是那些标准Windows窗体,比如MessageBox,OpenDialog。这些窗体不是由TForm组合而成的。所以对象和消息机制都不一样。需要单独处理。
这里有一种方式,是通过定时器,定时查询活动窗体状态。如果检测到非标准Windows窗体,手动触发你的任务。也是一种权衡解决方式。
由于代码版权问题,我这里不能贴出这些代码,不过主要意思应该都讲清楚了吧。
总结以下这个关键点:
-
消息机制和流程代码的冲突,是根本原因
-
简单的模型,就是循环嵌套循环问题
-
使用钩子,在循环开始处,触发任务
这样,基本就可以控制界面了。
分享到:
相关推荐
【文档标题】:“WEB自动化测试框架文档.doc” 【文档描述】:该文档详细阐述了WEB自动化测试的关键思路、编码基础和框架介绍,旨在提供一套有效的自动化测试解决方案。 【标签】:“WEB自动化测试框架文档.doc” ...
Python UI自动化测试框架是软件测试领域中一种高效、灵活的工具,它可以帮助测试人员实现对图形用户界面(GUI)的自动化测试。本框架基于Python编程语言,结合了Selenium WebDriver库,unittest测试框架,...
在【基于python的接口自动化测试框架(带演示案例版)】中,我们可以看到一个完整的测试解决方案,它可能包含了以下关键知识点: 1. **Python基础**:Python的基础语法是构建自动化测试框架的基础,包括变量、数据...
### 基于Python的接口自动化测试框架知识点详解 #### 一、接口自动化测试框架概述 1. **测试金字塔模型**: - **定义**:采用金字塔形状展示不同层次的测试类型及其相对比重的一种模型。 - **层级划分**: - **...
总结,WebUI自动化测试框架是提升软件质量的关键手段,通过合理选用和实施,可以显著提升测试效率,保证产品的稳定性。在具体实践中,应根据项目特点选择适合的框架,并不断优化测试流程,以实现最佳效果。
软件自动化测试框架的关键点包括软件自动化测试生命周期、如何建立高质量的自动化测试过程等。本文对这些关键点进行了详细的阐述和实现。 5. Selenium的应用 Selenium是一种常用的自动化测试工具,可以用来测试UI...
选择合适的脚本语言是自动化测试框架设计的关键一步。常见的自动化框架开发语言有 C、C++、Java、TCL、Perl、Ruby、Python 等。每种语言都有其优缺,需要根据具体情况选择合适的语言。例如,C 或者 C++ 可以提高自动...
【描述】"基于appium+java 的APP UI自动化测试框架"暗示了这个项目的核心是实现APP用户界面(UI)的自动化测试,利用Appium的跨平台特性,通过Java编写测试脚本,来模拟用户的各种操作,如点击、滑动、输入等,以...
在构建App-UI自动化测试框架时,Python语言与Selenium、Appium、Pytest和YAML等工具结合,可以提供高效且灵活的解决方案。这里我们将深入探讨这些技术以及如何利用它们来实现Android应用的自动化测试。 首先,让...
2. 编码实现:选择合适的自动化测试框架,将测试用例转化为可执行的代码。 3. 执行测试:运行自动化测试脚本,记录测试结果。 4. 结果分析:对比预期结果与实际结果,找出失败的测试用例,分析原因。 5. 报告生成:...
### 基于 Web 的自动化测试框架 #### 摘要与关键词解析 本文主要讨论了一种基于Web系统的自动化测试框架的设计与实现。随着互联网技术的发展,Web应用日益增多,其复杂度也在不断提高,这使得传统的手动测试方式...
3. 自动化测试框架:如Selenium、Appium、Junit、TestNG等,它们提供了一套结构化的环境来编写和执行测试用例。了解这些框架的使用和配置是成为自动化测试专家的基础。 4. 编写测试脚本:使用编程语言(如Java、...
- **简介**:Holmos是一个基于Selenium WebDriver的自动化测试框架,由Java语言编写。 - **特点**: - 集成了Selenium的核心能力,支持多种浏览器。 - 提供了一套丰富的API,方便进行复杂的测试脚本编写。 - **...
Python通用UI自动化测试框架源码2.0是一个旨在简化UI自动化测试的工具,适用于各种软件或Web应用的测试。这个框架的核心目标是提高测试效率,降低维护成本,通过抽象元素操作、检查点验证和回退策略,使得测试用例...
学习QTP自动化测试框架时,通常需要掌握以下几个关键知识点: 1. **对象模型和识别**:理解QTP如何识别和描述应用程序的对象,以及如何在对象库中管理它们。 2. **VBScript基础**:虽然QTP的录制功能强大,但深入...
自动化测试框架是软件开发过程中的重要工具,它能够提高测试效率,减少手动测试的工作量,保证测试的准确性和一致性。本框架以“QC+QTP”为核心,结合了Quality Center(QC)的质量管理功能和QuickTest Professional...
自动化测试框架是用于组织和执行测试用例的结构,如Selenium WebDriver、TestNG、JUnit等。它们提供了一种结构化的方式来编写和运行测试,支持断言、报告、数据驱动测试等功能。 6. 页面对象模型(POM): POM是...