我正在构建一个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
| | |-- ...
以使项目可扩展且可维护的方式保持这些定位器(与代码分开)的最佳方法是什么?
- 与文件(资源)分开的文件夹"定位器"(root)和每个定位器一个变量?
- "通用关键字"one_answers" Web App"文件夹中的一个定位器文件(一个通过应用程序)?
- ...等
有很多方法可以做到这一点,哪一种是最好的?
我感谢一些想法/建议。谢谢。
不会有一个适合您问题的答案,因为其中的很大取决于您的应用程序,技术功能级别以及您(组织)编码样式。
如果您的应用程序的UI以页面或页面部分的形式重复,则使用静态ID,则页面对象模型非常合适。有一个可以使用或从中汲取灵感的PageObject库。
集中定位器的另一种方式是使用诸如Click Element abc=SomeVirtualId
之类的自定位器。在另一个问题的答案中可以找到这种方法的一个例子。当您的ID对您的元素是可以预测的并且可以生成的时,此方法也很有用。然后它使逻辑中心无需许多自定义关键字。
首先,没有"最佳"。一个最适合一个组织或团队的最佳选择不会最适合另一个组织。你有多少?他们多久改变一次?它们在页面之间或应用之间重复了多少?您是在测试中还是仅在关键字中使用它们?您的大多数关键字是用机器人语法编写的,还是用Python或其他一些编程语言?
就我个人而言,我对整个项目的而不是而不是的储存定位器。我认为测试根本不应该有定位器。
我认为,通过创建自己的自定义关键字,当您将机器人框架用作框架时,机器人框架最有效。定位器只需要对使用它们的关键字或关键字可见,而不是在您的代码中撒上。
我是使用页面对象模式的强烈拥护者,其中每个页面或页面的每个部分都表示为对象。在该对象中,您只需要该页面或页面部分中的元素的定位器。根据我的经验,通常每页只有很少的定位者。
有关如何使用机器人实现页面对象的示例,请参阅我的开源项目,Robotframework-pageObjectLibrary。该实现具有用于存储定位器的数据结构,但是在过去的一年中
目前我正在研究一个类似的大型机器人框架项目,所以我必须自己解决这个问题。这是我的解决方案:
.
|-- 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开头,以避免从另一个页面中意外继承同一名称变量。关键字文件从其关联的变量文件和其他关键字文件中继承。。