AutoIT Page/Window 对象模型

AutoIT Page/Window Object Model

请问能否在AutoIT中也实现一个Page/Window对象模型?我的大部分项目任务都是关于 Web 自动化的,我正在使用 Selenium Webdriver 和框架使用页面对象模型。目前,我被分配到一个 GUI 自动化项目。如果可行的话,我也喜欢在 AutoIT 中实施这种方法,这样我就可以将对象重用给其他 类。我们计划单独使用 AutoIT。我注意到互联网上可用的大多数示例都是在每个 class/script 上创建的对象。

非常感谢您的见解。

谢谢!

一般:

使用 页面对象模型 (POM) 设计模式 的常见方法在 AutoIt 中不太可行。当然,您也可以使用 AutoIt 创建对象结构,但它不是为该语言设计的。无论如何,POM 的一些目标可以通过以下测试结构的示例建议来实现。

请注意:

由于您没有提供有关您的被测应用程序 (AUT) 的足够信息,我将解释一个基本结构。实现取决于您的应用程序(SWING/RCP、WinForm 等)。您的页面对象识别需要哪些工具支持也很重要。除了 WinForm 可以由 AutoIt 中的 ControlCommand 函数控制外,使用 UIASpy[ 是一种正确的方法=175=] 作为辅助工具。

在 Selenium 的上下文中了解 POM 结构是一个优势。我通常会在 行为驱动开发 BDD(Cucumber 或 SpecFlow 的 Gherkin 语法)中包含一个测试用例描述,但这不会成为此处示例的一部分。

示例结构:

该结构由两个被测应用CalcVlcPlayer组成。两者都遵循共同的结构 PageObjectsTests。您应该尝试将您的页面对象(文件)划分在许多子文件夹中以保持概览。 Tests folder/subfolders.

的子结构应该类似

Tests 区域中,您可以根据您的测试目标(Acceptance/UI 测试,仅功能性冒烟测试等)包括多个测试阶段或测试类别。通过单独的包装文件 TestCaseExecutionOrder.au3 来控制执行顺序也是一个好主意。这应该适用于所有测试类别,以避免混淆它们。

这个包装 au3 文件包含函数调用,它是处理 start/control。

方法说明:

  • TestCaseExecutionOrder.au3

    • 调用子文件夹(Menu、PlaylistContentArea、SideNavigation)中的测试用例函数。
    • 测试用例NiceName包含一些测试步骤。

      • 必须通过以下方式将这些测试步骤包含在 script/file 中:

        #include-once ; this line is optional
        #include "Menu\OpenFolder.au3"
        
      • 测试步骤 OpenFolder.au3(它是测试用例的一部分)包含执行文件夹加载和其中内容的函数。

        • 在该函数中,PageObject MenuItemMedia.au3 将 loaded/included 转换为 script/file,方法是:

          #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 中一样以类似的方式进行 网络测试 。请注意,您必须经常使用 Global 变量。您必须确保正确 includings 并且不要丢失测试的概览,这在基于 OOP 测试的方法中要容易得多。

我推荐使用 VS Code,因为您可以在 #include 语句 中从一个文件跳转到另一个文件。这很方便。

I hope this will help you.