如何在XPATH中使用变量,应该在关键字或测试中设置哪个值?
How to use variable, which value should be set in keyword or test, in XPATH?
我需要根据它包含的值来点击元素..但我想在测试 运行 或关键字定义中设置这个值(我猜最好的选择是在测试中)
我应该怎么做?
包含 xpath 的变量应该如下所示:
${DROPDOWN ITEMS} xpath=//*[contains(@class,'listitem-element')]/span[contains(text(),'${second_number}')]
当我用像“002”这样的实际数字替换变量时,这个定位器工作,但我想让它更通用..
在关键字定义中我这样使用它:
Choose Value From Dropdown
focus ${DROPDOWN ITEMS}
click element ${DROPDOWN ITEMS}
在测试中我只调用关键字
我的问题是在哪里以及如何设置 xpath 中使用的 ${second_number} 变量的变量值?
PS:the xpath 定义、关键字和测试都在单独的文件中
谢谢!
您可以在启动测试套件时使用参数定义变量。
Here is the documentation for it
现在,您可以让 xpath 保持原样。将 ${second_number} 放在里面。现在您可以在参数或参数文件中定义它。他们做完全相同的事情,但一个更整洁。只是为了让它工作,我只需要担心将它直接放在控制台中。
pybot -v second_number:002 nameOfTestFile.robot
这会告诉pybot创建一个名为${second_number}的变量,值为002。它不会在测试中保存这个,所以在测试完成后,它会忘记这个变量。
一旦成功,您就可以将其移动到 Argument file Or if you want you can even define it inside a Variable file 中,您可以在其中存储所有变量,然后在参数文件/控制台中调用它们。
如有任何问题,我会尽力提供帮助
使用 set suite variable
关键字怎么样?
我在我的 SUT 中使用了类似的方法,因为它处理相当复杂的对象,这些对象在测试执行期间预先创建和动态生成 - 并且它们的主要用户可识别属性是显示的名称。这是我的流程的简化版本,它基于字符串替换。
从变量文件开始 - selenium 定位器的简单集合,定位器的值有一个 "special" 字符串,稍后将替换为:
*** VARIABLES ***
${DROPDOWN ITEMS} xpath=//*[contains(@class,'listitem-element')]/span[contains(text(),'SELENIUM_PLACEHOLDER_CHANGE_ME')]
然后,在关键字文件中有用于返回正确定位器的私有关键字,例如这个:
*** KEYWORDS ***
_Return Selenium Locator For The Dropdown Item Named
[Documentation] Verifies the desired dropdown item is valid, ando returns its locator (not Webelements!!)
[Arguments] ${name}
# change the placeholder with the actual UI name
${loc}= Replace String ${DROPDOWN ITEMS} SELENIUM_PLACEHOLDER_CHANGE_ME ${name}
# why? Rationale explained below
Element Should Be Visible ${loc} message=The dropdown does not have an item called ${name}
[Return] ${loc}
为什么要检查能见度?简单 - 如果当前在 SUT 中没有这样的对象,则尽可能早地失败,并有统一的错误消息,独立于如何进一步使用元素(单击、检查存在、属性检索等)
然后,对元素执行操作的后续用户关键字使用前一个关键字:
# the user keywords
Choose Value From Dropdown
[Documentation] It does what it does :)
[Arguments] ${the value}
${loc}= _Return Selenium Locator For The Dropdown Item Named ${the value}
# as you can see, no checks is the element real - that'she offloaded to the helper keyword ^
Focus Element ${loc}
Click Element ${loc}
最后,测试用例使用关键字来处理您认为需要的任何数据:
*** TESTCASE ***
The dropdown should do X
[Documentation] Steps: 1, 2, 3, etc
# do the normal steps you'do do
Choose Value From Dropdown my current value
这种方法也适用于负面测试 - 例如,要检查不存在的值,测试用例将包含:
Run Keyword And Expect Error The dropdown does not have an item called no_such_element Choose Value From Dropdown no_such_element
因此,我们都使用 selenium 检查元素是否缺失,并使测试用例接近现实生活中的表达式 - 对应该发生的情况的描述,没有特殊语法和 SE 关键字。
请原谅任何拼写错误和轻微的语法遗漏 - 在手机上输入那么多并不容易,下次我会三思而后行:D
我们可以使用 Evaluate 关键字来构建动态变化的 xpath
*** 变量 ***
${common xpath} xpath=//label[contains(text(), '{0}')]
${text to be replaced} my name
*** 关键字 ***
根据用户输入构建 xpath
${final xpath} Evaluate "${common xpath}".format("${text to be replaced}")
log ${final xpath}
结果
在 ${final xpath} 中,您将拥有“xpath=//label[contains(text(), 'my name')]”
我需要根据它包含的值来点击元素..但我想在测试 运行 或关键字定义中设置这个值(我猜最好的选择是在测试中) 我应该怎么做?
包含 xpath 的变量应该如下所示:
${DROPDOWN ITEMS} xpath=//*[contains(@class,'listitem-element')]/span[contains(text(),'${second_number}')]
当我用像“002”这样的实际数字替换变量时,这个定位器工作,但我想让它更通用..
在关键字定义中我这样使用它:
Choose Value From Dropdown
focus ${DROPDOWN ITEMS}
click element ${DROPDOWN ITEMS}
在测试中我只调用关键字
我的问题是在哪里以及如何设置 xpath 中使用的 ${second_number} 变量的变量值? PS:the xpath 定义、关键字和测试都在单独的文件中 谢谢!
您可以在启动测试套件时使用参数定义变量。 Here is the documentation for it
现在,您可以让 xpath 保持原样。将 ${second_number} 放在里面。现在您可以在参数或参数文件中定义它。他们做完全相同的事情,但一个更整洁。只是为了让它工作,我只需要担心将它直接放在控制台中。
pybot -v second_number:002 nameOfTestFile.robot
这会告诉pybot创建一个名为${second_number}的变量,值为002。它不会在测试中保存这个,所以在测试完成后,它会忘记这个变量。
一旦成功,您就可以将其移动到 Argument file Or if you want you can even define it inside a Variable file 中,您可以在其中存储所有变量,然后在参数文件/控制台中调用它们。
如有任何问题,我会尽力提供帮助
使用 set suite variable
关键字怎么样?
我在我的 SUT 中使用了类似的方法,因为它处理相当复杂的对象,这些对象在测试执行期间预先创建和动态生成 - 并且它们的主要用户可识别属性是显示的名称。这是我的流程的简化版本,它基于字符串替换。
从变量文件开始 - selenium 定位器的简单集合,定位器的值有一个 "special" 字符串,稍后将替换为:
*** VARIABLES ***
${DROPDOWN ITEMS} xpath=//*[contains(@class,'listitem-element')]/span[contains(text(),'SELENIUM_PLACEHOLDER_CHANGE_ME')]
然后,在关键字文件中有用于返回正确定位器的私有关键字,例如这个:
*** KEYWORDS ***
_Return Selenium Locator For The Dropdown Item Named
[Documentation] Verifies the desired dropdown item is valid, ando returns its locator (not Webelements!!)
[Arguments] ${name}
# change the placeholder with the actual UI name
${loc}= Replace String ${DROPDOWN ITEMS} SELENIUM_PLACEHOLDER_CHANGE_ME ${name}
# why? Rationale explained below
Element Should Be Visible ${loc} message=The dropdown does not have an item called ${name}
[Return] ${loc}
为什么要检查能见度?简单 - 如果当前在 SUT 中没有这样的对象,则尽可能早地失败,并有统一的错误消息,独立于如何进一步使用元素(单击、检查存在、属性检索等)
然后,对元素执行操作的后续用户关键字使用前一个关键字:
# the user keywords
Choose Value From Dropdown
[Documentation] It does what it does :)
[Arguments] ${the value}
${loc}= _Return Selenium Locator For The Dropdown Item Named ${the value}
# as you can see, no checks is the element real - that'she offloaded to the helper keyword ^
Focus Element ${loc}
Click Element ${loc}
最后,测试用例使用关键字来处理您认为需要的任何数据:
*** TESTCASE ***
The dropdown should do X
[Documentation] Steps: 1, 2, 3, etc
# do the normal steps you'do do
Choose Value From Dropdown my current value
这种方法也适用于负面测试 - 例如,要检查不存在的值,测试用例将包含:
Run Keyword And Expect Error The dropdown does not have an item called no_such_element Choose Value From Dropdown no_such_element
因此,我们都使用 selenium 检查元素是否缺失,并使测试用例接近现实生活中的表达式 - 对应该发生的情况的描述,没有特殊语法和 SE 关键字。
请原谅任何拼写错误和轻微的语法遗漏 - 在手机上输入那么多并不容易,下次我会三思而后行:D
我们可以使用 Evaluate 关键字来构建动态变化的 xpath
*** 变量 ***
${common xpath} xpath=//label[contains(text(), '{0}')]
${text to be replaced} my name
*** 关键字 ***
根据用户输入构建 xpath
${final xpath} Evaluate "${common xpath}".format("${text to be replaced}")
log ${final xpath}
结果
在 ${final xpath} 中,您将拥有“xpath=//label[contains(text(), 'my name')]”