【问题标题】:AutoIT Page/Window Object ModelAutoIT 页面/窗口对象模型
【发布时间】:2019-06-16 19:14:48
【问题描述】:

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

我们非常感谢您的见解。

谢谢!

【问题讨论】:

  • 请提供有关您的应用程序 (AUT) 的更多信息。那么也许我可以在下面添加更多详细信息或建议来增加我的答案。

标签: user-interface testing automation autoit testautomationfx


【解决方案1】:

一般:

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

请注意:

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

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

示例结构:

该结构由两个正在测试的应用程序CalcVlcPlayer 组成。两者都遵循共同的结构 PageObjectsTests。您应该尝试在许多子文件夹中划分您的页面对象(文件)以保持概览。 Tests 文件夹/子文件夹的这个子结构应该是相似的。

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

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

方法说明:

  • TestCaseExecutionOrder.au3

    • 调用作为子文件夹(Menu、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
              
      • 在调用_findMenuItemMedia()的测试步骤OpenFolder.au3中:

        Global $oMedia = _findMenuItemMedia()
        

        可以执行.click 或类似.getText 等的东西。

测试用例应该只#include 必要的文件(测试步骤)。测试步骤也应该只有#include必要的文件(页面对象)等等。因此可以一次调整识别功能,就可以在相应的测试步骤中使用。

结论:

当然,很难用这种方式来解释它,但是通过这种方法,您可以像在 Selenium 中那样为 web 测试 做类似的事情。请注意,您必须经常使用Global 变量。您必须确保正确包括,并且不要丢失您的测试概览,这在基于 OOP 测试的方法中要容易得多。

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

希望对你有帮助。

【讨论】:

  • 谢谢你的回答,斯文。这对我的工作很有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多