我想问一下我们是否还可以在AutoIT中实现页面/窗口对象模型?我的项目任务大多数是在Web Automation上进行的,而我正在将Selenium Webdriver与Framework使用Page Object Model一起使用。目前,我已分配到一个用于GUI自动化的项目。如果可行,我希望在AutoIT中也实现这种方法,以便可以将对象重用到其他类。我们计划独立使用AutoIT。我注意到,互联网上可用的大多数示例都是在每个类/脚本上创建的对象。
您的见解受到高度赞赏。
谢谢!
答案 0 :(得分:1)
常规:
使用页面对象模型(POM)设计模式的常见方法在AutoIt中并不可行。当然,您也可以使用AutoIt创建对象结构,但这并不是该语言所必需的。无论如何,可以通过以下示例测试结构建议来实现POM的某些目标。
请注意:
由于您没有提供有关被测应用程序(AUT)的足够信息,因此,我将解释一个基本结构。实现取决于您的应用程序(SWING / RCP,WinForm等)。您需要哪种工具支持来识别页面对象也很重要。除了可以由AutoIt中的ControlCommand
函数控制的 WinForm 之外,这也是使用 UIASpy 或 au3_uiautomation 作为辅助工具的正确方法。
了解Selenium中的POM结构是一个优势。我通常会在行为驱动的开发 BDD(带有Cucumber或SpecFlow的小黄瓜语法)中包含一个测试用例描述,但这不是该示例的一部分。
示例结构:
该结构由两个正在测试的应用程序 Calc 和 VlcPlayer 组成。两者都遵循通用结构 PageObjects 和 Tests 。您应该尝试在许多子文件夹中分配页面对象(文件)以保持概览。对于 Tests 文件夹/子文件夹,此子结构应该相似。
在测试区域中,您可以根据测试目标(验收/ UI测试,仅功能性烟雾测试等)包括几个测试阶段或测试类别。最好通过一个独立的包装文件 TestCaseExecutionOrder.au3 控制执行顺序。所有测试类别都应存在此属性,以避免混淆。
这个包装器au3文件包含函数调用,它是处理的开始/控制。
方法说明:
TestCaseExecutionOrder.au3
测试用例 NiceName 包含一些测试步骤。
这些测试步骤必须通过以下方式包含到该脚本/文件中:
#include-once ; this line is optional
#include "Menu\OpenFolder.au3"
测试步骤 OpenFolder.au3 (属于测试用例的一部分)包含用于执行文件夹加载并包含内容的功能。
在该功能中,PageObject MenuItemMedia.au3 将通过以下方式加载/包含在脚本/文件中:
#include-once ; this line is optional
#include "..\..\..\PageObjects\Menu\MenuItemMedia.au3"
文件 MenuItemMedia.au3 应该只包含该区域和动作的识别机制。
或查找打开的文件夹菜单项(作为功能)等等。
Func _findMenuItemMedia()
; do the recognition action
; ...
Return $oMenuItem
EndFunc
在测试步骤 OpenFolder.au3 中,其调用_findMenuItemMedia()
的方式如下:
Global $oMedia = _findMenuItemMedia()
是否可以执行.click
或类似.getText
之类的东西。
测试用例仅应#include
个必需的文件(测试步骤)。测试步骤还应该仅#include
必要的文件(页面对象)等等。因此,可以一次调整识别功能,并将其用于相应的测试步骤中。
结论:
当然很难以这种方式进行解释,但是通过这种方法,您可以像在Selenium中进行类似的方式来进行 web测试。请注意,您可能经常需要使用Global
变量。您必须确保正确的 includes ,并且不要丢失测试概述,而这在基于OOP测试的方法中要容易得多。
我建议使用VS Code,因为您可以在 #include语句中从一个文件跳到另一个文件。很方便。
我希望这会对您有所帮助。