集中资源文件中的 XPath,如何从机器人文件传递参数?
Centralizing XPath in resource file, how to pass arguement from robot file?
我将所有特定的 XPath 字符串集中到一个资源文件中,并在我的测试套件(机器人框架)中导入该资源文件中的变量。这样,它们就可以在一个地方维护,我可以使用使机器人文件可读的变量名。这是好的做法吗?
有时我想给变量传递一个参数,让它更动态。但是,变量的值包含和 XPath,有时有 //div[path...etc][text()='MyString'].
问题:在机器人文件中,如何将参数('MyString')传递给使用变量的Click Element方法?
将 UI 对象技术参考与测试逻辑分开当然是一个好习惯。通常,此模式称为对象存储,但也使用其他名称。
至于分离方法,我建议对静态值使用 YAML variable file over a resource file 并使用命令行参数 robot --variablefile MyVariables.yaml MyRobotFile.robot
包含它们,而不是在测试脚本中包含资源文件。这有一个额外的好处,如果你想因为不同的软件版本而切换你的对象存储,那么这不需要更改测试脚本。
如果您的变量内容根据启动机器人时已知的某些值而变化,那么 Python 变量 Class 是一个很好的方法。这是一个带参数的 Python function or Python class,您可以使用 Python 转到数据库、文件,或使用内部逻辑来确定需要返回哪些变量以及它们应该保存什么值。
至于向 xpath 添加变量片段而不以大量特定的专用关键字结束,我使用了 SeleniumLibrary 库中的 Custom Locator Strategy 功能。这允许我在测试逻辑本身中使用普通关键字而无需任何其他关键字。
在下面的示例中,创建了一个自定义定位器 abc=
,并且可以代替 xpath=
用于任何标准的 SeleniumLibrary 关键字。在这种情况下,我使用字典作为定位器对象存储来保存 ID 并使用唯一名称引用它们。请注意,abc=
已从 ${criteria}
参数中的值中删除。
*** Variables ***
&{locators}
... myCustomId1=//*[@id='12234']
... myCustomId2=//*[@id='23455']
*** Test Cases ***
Test Case
Add Location Strategy abc Custom Locator Strategy
Page Should Contain Element abc=myCustomId1
*** Keywords ***
Custom Locator Strategy
[Arguments] ${browser} ${criteria} ${tag} ${constraints}
${WebElement}= Get Webelement xpath=${locators['${criteria}']}
[Return] ${WebElement}
我将所有特定的 XPath 字符串集中到一个资源文件中,并在我的测试套件(机器人框架)中导入该资源文件中的变量。这样,它们就可以在一个地方维护,我可以使用使机器人文件可读的变量名。这是好的做法吗?
有时我想给变量传递一个参数,让它更动态。但是,变量的值包含和 XPath,有时有 //div[path...etc][text()='MyString'].
问题:在机器人文件中,如何将参数('MyString')传递给使用变量的Click Element方法?
将 UI 对象技术参考与测试逻辑分开当然是一个好习惯。通常,此模式称为对象存储,但也使用其他名称。
至于分离方法,我建议对静态值使用 YAML variable file over a resource file 并使用命令行参数 robot --variablefile MyVariables.yaml MyRobotFile.robot
包含它们,而不是在测试脚本中包含资源文件。这有一个额外的好处,如果你想因为不同的软件版本而切换你的对象存储,那么这不需要更改测试脚本。
如果您的变量内容根据启动机器人时已知的某些值而变化,那么 Python 变量 Class 是一个很好的方法。这是一个带参数的 Python function or Python class,您可以使用 Python 转到数据库、文件,或使用内部逻辑来确定需要返回哪些变量以及它们应该保存什么值。
至于向 xpath 添加变量片段而不以大量特定的专用关键字结束,我使用了 SeleniumLibrary 库中的 Custom Locator Strategy 功能。这允许我在测试逻辑本身中使用普通关键字而无需任何其他关键字。
在下面的示例中,创建了一个自定义定位器 abc=
,并且可以代替 xpath=
用于任何标准的 SeleniumLibrary 关键字。在这种情况下,我使用字典作为定位器对象存储来保存 ID 并使用唯一名称引用它们。请注意,abc=
已从 ${criteria}
参数中的值中删除。
*** Variables ***
&{locators}
... myCustomId1=//*[@id='12234']
... myCustomId2=//*[@id='23455']
*** Test Cases ***
Test Case
Add Location Strategy abc Custom Locator Strategy
Page Should Contain Element abc=myCustomId1
*** Keywords ***
Custom Locator Strategy
[Arguments] ${browser} ${criteria} ${tag} ${constraints}
${WebElement}= Get Webelement xpath=${locators['${criteria}']}
[Return] ${WebElement}