我想问一下我们是否也可以在AutoIT中实现页面/窗口对象模型?我的大部分项目任务是关于 Web 自动化,我使用 Selenium Webdriver 和框架使用页面对象模型。目前,我被分配到一个 GUI 自动化项目。如果可行,我也喜欢在 AutoIT 中实现这种方法,以便我可以将对象重用于其他类。我们计划单独使用 AutoIT。我注意到互联网上可用的大多数示例都是在每个类/脚本上创建的对象。
非常感谢您的见解。
谢谢!
我想问一下我们是否也可以在AutoIT中实现页面/窗口对象模型?我的大部分项目任务是关于 Web 自动化,我使用 Selenium Webdriver 和框架使用页面对象模型。目前,我被分配到一个 GUI 自动化项目。如果可行,我也喜欢在 AutoIT 中实现这种方法,以便我可以将对象重用于其他类。我们计划单独使用 AutoIT。我注意到互联网上可用的大多数示例都是在每个类/脚本上创建的对象。
非常感谢您的见解。
谢谢!
一般的:
使用页面对象模型 (POM) 设计模式的常见方法在AutoIt 中并不可行。当然,您也可以使用 AutoIt 创建对象结构,但它不适用于该语言。无论如何,POM 的一些目标可以通过以下测试结构的示例建议来实现。
请注意:
由于您没有提供有关被测应用程序 (AUT)的足够信息,因此我将解释一个基本结构。实施取决于您的应用程序(SWING/RCP、WinForm 等)。页面对象识别需要哪种工具支持也很重要。除了可以通过AutoIt中的函数控制的WinForm之外,使用UIASpy或au3_uiautomation作为辅助工具ControlCommand
是一种正确的方法。
在 Selenium 的上下文中了解 POM 结构是一个优势。我通常包含一个带有行为驱动开发BDD的测试用例描述(带有 Cucumber 或 SpecFlow 的 Gherkin 语法),但这不会是这里示例的一部分。
示例结构:
该结构由两个被测应用程序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 for web testing中那样做类似的方式。请注意,您必须Global
经常使用变量。您必须确保包含正确的内容,并且不要丢失测试的概述,这在基于 OOP 测试的方法中要容易得多。
我推荐使用 VS Code,因为您可以在#include statements处从文件跳转到文件。这很方便。
我希望这能帮到您。