【问题标题】:Best way to store locators in Robotramework在 Robot Framework 中存储定位器的最佳方式
【发布时间】:2018-05-18 08:16:47
【问题描述】:

我正在构建一个 Robotframework 自动化项目。

随着项目的发展,随着项目中选择器数量的增加,维护也变得更加困难。

项目中有+10K选择器(一个大的),每个选择器几乎没有变化;

现在我有以下结构:

 .
 |-- Project
 |   |-- Generic Keywords
 |   |   |-- Web App A
 |   |   |   `-- GUI_Actions.robot
 |   |   |-- Web App B
 |   |   |   |-- GUI_Actions.robot
 |   |   |   |-- DB_Actions.robot
 |   |   |   |-- ...
 |   |   `-- ...
 |   |-- Tests
 |   |   `-- Web App A
 |   |       |-- Suite1.robot
 |   |       |-- Suite2.robot
 |   |       |-- ...
 |   |   `-- Web App B
 |   |       |-- Suite1.robot
 |   |       |-- Suite2.robot
 |   |       |-- ...

以使项目可扩展和可维护的方式保持这些定位器(与代码分开)的最佳方法是什么?

  • 带有文件(资源)和每个定位器一个变量的分隔文件夹“Locators”(在根目录中)?
  • “通用关键字”和“Web 应用程序”文件夹中的一个定位器文件(一个按应用程序)?
  • ...等

有很多方法可以做到这一点,哪一种是最好的?

我很欣赏一些想法/建议。谢谢。

【问题讨论】:

    标签: selenium xpath automation robotframework robotframework-ide


    【解决方案1】:

    不会有一个适合您的问题的答案,因为它在很大程度上取决于您的应用程序、技术能力水平和您(组织)的编码风格。

    如果您的应用程序的 UI 以页面或页面部件的形式非常重复,并且具有静态 ID,那么页面对象模型非常适合。您可以使用PageObject Library 或从中获取灵感。

    另一种集中定位器的方法是使用自定义定位器,例如 Click Element abc=SomeVirtualId。这种方法的一个例子可以在answer 中找到另一个 SO 问题。当您的元素的 Id 是可预测的并且可以生成时,这种方法也很有用。然后它集中了逻辑,而不需要许多自定义关键字。

    【讨论】:

      【解决方案2】:

      首先,没有“最好”。对一个组织或团队最好的东西不会对另一个组织或团队最好。你有多少?他们多久改变一次?它们在页面之间或应用程序之间重用了多少?您是在测试中使用它们,还是仅在关键字中使用它们?您的大部分关键字是用机器人语法编写的,还是用 python 或其他编程语言编写的?

      我个人非常相信为整个项目存储或管理定位器。我认为测试中根本不应该有定位器。

      我认为,通过创建自己的自定义关键字,将机器人框架用作框架时效果最佳。定位器只需要对使用它们的一个或多个关键字可见,而不是散布在整个代码中。

      我强烈支持使用页面对象模式,其中每个页面或页面的每个部分都表示为一个对象。在该对象中,您只需要该页面或页面部分中的元素的定位器。以我的经验,这通常意味着每页只有很少的定位器。

      有关如何使用机器人实现页面对象的示例,请参阅我的开源项目robotframework-pageobjectlibrary。这个实现有一个用于存储定位器的数据结构,但在过去的一年里,我发现自己很少使用它,而是选择在每个函数中硬编码定位器。

      【讨论】:

      • 我还观察到,当使用分层方法时,定位器引用的重用率很低,其中 UI 功能/特性与实际测试逻辑分离在一个单独的层中。当 Id 是稳定的引用时,我也会对其进行硬编码。
      • @A.Kootstra:我同意。切换到使用页面对象模型后,我发现我很少重复使用定位器。
      【解决方案3】:

      我目前正在处理一个类似的大型机器人框架项目,所以我不得不自己解决这个问题。这是我的解决方案:

      .
      |-- Project
      |   |-- Tests
      |   |   |-- Suite1.robot
      |   |   |-- Suite2.robot
      |   |   |-- ....robot
      |   |-- Resources
      |   |   |-- Suite1_Resources
      |   |   |   |-- Suite1_Keywords.txt
      |   |   |   |-- Suite1_Variables.txt
      |   |   |-- Suite2_Resources
      |   |   |   |-- Suite2_Keywords.txt
      |   |   |   |-- Suite2_Variables.txt
      |   |   |-- ..._Resources
      

      详情

      一个套件处理整个网站的关键字(例如检查导航),而其余的则特定于每个单独的页面。每个关键字文件只处理网站上一个特定页面的关键字。每个变量文件只处理其关联页面的变量。每个变量名称都以与其关联的页面的两个字母 ID 开头,以避免意外地从另一个页面继承同名变量。关键字文件从其关联的变量文件和其他关键字文件继承。 .robot 测试根据需要从多个关键字文件继承以形成测试用例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 1970-01-01
        相关资源
        最近更新 更多