0

我正在构建一个 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
 |   |       |-- ...

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

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

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

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

4

3 回答 3

3

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

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

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

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

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

于 2017-12-05T13:33:23.000 回答
3

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

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

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

于 2017-12-05T08:34:18.723 回答
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 测试根据需要从多个关键字文件继承以形成测试用例。

于 2017-12-14T19:32:13.737 回答