Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 在Robotramework中存储定位器的最佳方法_Selenium_Xpath_Automation_Robotframework_Robotframework Ide - Fatal编程技术网

Selenium 在Robotramework中存储定位器的最佳方法

Selenium 在Robotramework中存储定位器的最佳方法,selenium,xpath,automation,robotframework,robotframework-ide,Selenium,Xpath,Automation,Robotframework,Robotframework Ide,我正在构建一个机器人框架自动化项目 随着项目的增长,随着项目中选择器数量的增加,维护也变得更加困难 +项目中有10K个选择器(一个大选择器),每个选择器几乎没有变化 现在我有以下结构: . |-- Project | |-- Generic Keywords | | |-- Web App A | | | `-- GUI_Actions.robot | | |-- Web App B | | | |-- GUI_Actions.robot

我正在构建一个机器人框架自动化项目

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

+项目中有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应用”文件夹中的一个定位器文件(应用程序一个)
  • 。。。等
有很多方法可以做到这一点,哪一种是最好的


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

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

如果应用程序的UI以页面或页面部分的形式重复出现,并且带有静态ID,那么页面对象模型是一个很好的选择。有一个你可以使用或从中获得灵感的方法

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

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

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

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

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


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

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

.
|-- 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测试根据需要从多个关键字文件继承来形成测试用例。

我还观察到,当使用分层方法时,定位器引用的重用率很低,其中UI功能/特性被抽象在与实际测试逻辑分离的层中。如果Id是稳定的引用,我也会硬编码。@A.Kootstra:我同意。在切换到使用页面对象模型之后,我发现我很少重用定位器。