AutoIT页面/窗口对象模型

时间:2019-01-23 08:44:14

标签: user-interface testing automation autoit testautomationfx

我想问一下我们是否还可以在AutoIT中实现页面/窗口对象模型?我的项目任务大多数是在Web Automation上进行的,而我正在将Selenium Webdriver与Framework使用Page Object Model一起使用。目前,我已分配到一个用于GUI自动化的项目。如果可行,我希望在AutoIT中也实现这种方法,以便可以将对象重用到其他类。我们计划独立使用AutoIT。我注意到,互联网上可用的大多数示例都是在每个类/脚本上创建的对象。

您的见解受到高度赞赏。

谢谢!

1 个答案:

答案 0 :(得分:1)

常规

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

请注意:

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

了解Selenium中的POM结构是一个优势。我通常会在行为驱动的开发 BDD(带有Cucumber或SpecFlow的小黄瓜语法)中包含一个测试用例描述,但这不是该示例的一部分。

示例结构:

enter image description here

该结构由两个正在测试的应用程序 Calc VlcPlayer 组成。两者都遵循通用结构 PageObjects Tests 。您应该尝试在许多子文件夹中分配页面对象(文件)以保持概览。对于 Tests 文件夹/子文件夹,此子结构应该相似。

测试区域中,您可以根据测试目标(验收/ UI测试,仅功能性烟雾测试等)包括几个测试阶段或测试类别。最好通过一个独立的包装文件 TestCaseExecutionOrder.au3 控制执行顺序。所有测试类别都应存在此属性,以避免混淆。

这个包装器au3文件包含函数调用,它是处理的开始/控制。

方法说明:

  • TestCaseExecutionOrder.au3

    • 调用子文件夹(菜单,PlaylistContentArea,SideNavigation)中的测试用例的函数。
    • 测试用例 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语句中从一个文件跳到另一个文件。很方便。

  

我希望这会对您有所帮助。