Robotframework 在机器人框架中,我们如何使用从一个关键字返回的值作为另一个关键字的直接输入参数(不使用变量)

Robotframework 在机器人框架中,我们如何使用从一个关键字返回的值作为另一个关键字的直接输入参数(不使用变量),robotframework,Robotframework,我们如何将一个关键字返回的值直接用作另一个关键字的输入参数(而不将返回值赋给变量) 目前,我正在Excel工作表中维护所有Web元素或变量名以及相应的xpath。我使用关键字read\uxpath通过传递web元素/变量名作为参数来获取XPath 我将xpath存储在单独的变量中,然后将其用于其他或下一行关键字。由于每次XPath访问都需要使用一个变量,所以我试图找出是否有任何方法可以直接使用一个关键字输出作为另一个关键字的输入,而不将其分配给变量 在Excel工作表中存储XPath的主要目的是

我们如何将一个关键字返回的值直接用作另一个关键字的输入参数(而不将返回值赋给变量)

目前,我正在Excel工作表中维护所有Web元素或变量名以及相应的xpath。我使用关键字
read\uxpath
通过传递web元素/变量名作为参数来获取XPath

我将xpath存储在单独的变量中,然后将其用于其他或下一行关键字。由于每次XPath访问都需要使用一个变量,所以我试图找出是否有任何方法可以直接使用一个关键字输出作为另一个关键字的输入,而不将其分配给变量

在Excel工作表中存储XPath的主要目的是避免使用单个元素XPath更改来更改多个测试用例,在Excel工作表中只进行一次更改就足够了

例如:
read\u xpath
从Excel工作表中读取值,Excel工作表有两列,一列是
变量名
,另一列是
xpath
。函数
read\u xpath(element)
变量名
作为输入并返回
xpath

xlread.py文件看起来像Excel工作表

sample.robot文件如下所示

${login_user_textctrl}=  read_xpath    username_textctrl

clear element text  ${login_user_textctrl}
Input text    ${login_user_textctrl}    admin
现在让我们检查一下我是如何在robot文件中使用
read\uxpath
关键字的

我用参数
username\u texctrl
调用关键字
read\u xpath
,它返回存储在变量
${login\u user\u textctrl}
中的用户名文本控件的xpath。现在输入文本
${login\u user\u textctrl}
admin工作正常

对于以下代码

      clear element text    read_xpath     username_textctrl           
我得到的是,clear元素文本需要1个参数,但提供了两个参数,是否有任何方法可以直接使用关键字(read_xpath)返回的值作为其他关键字的输入,而不将其分配给任何变量


提前感谢。

您可以使用
Evaluate
直接调用python函数。例如:

${my element to clear}=    Evaluate    read_xpath("username_textctrl")    xlread  
请参阅文档


(注意:示例未经测试,您应该检查xlread是否在PYTHONPATH中,或者是否在测试运行时找到)

您可以使用
Evaluate
直接调用python函数。例如:

${my element to clear}=    Evaluate    read_xpath("username_textctrl")    xlread  
请参阅文档


(注意:示例未经测试,您应该检查xlread是否在PYTHONPATH中,或者是否在测试运行时找到)

当定位器被大量重用时,通常会通过对象存储库将定位器与机器人代码分离。另一种实现范例是使用页面对象模型。可以在中找到此类实现的示例

如果您仍然喜欢对象存储库方法,那么您可能会对使用
Selenium2Library
关键字感兴趣。下面是一个工作示例,它使用一个YAML文件作为输入或从Google获取搜索输入框和搜索按钮

ObjectRepo.yaml

OR: 
 searchbox: '//input[@id="lst-ib"]'
 searchbutton: '//button[@id="_fZl"]'
机器人脚本

*** Settings ***
Library    Selenium2Library
Variables    ObjectRepo.yaml

*** Test Cases ***
Yaml Object Repository
    [Setup]    Add Location Strategy    yro    Yaml Locator Strategy
    Open Browser    http://www.google.com    Chrome
    Input Text        yro=searchbox    Robot Framework
    Click Element     yro=searchbutton
    Sleep     3s
    [Teardown]    Close All Browsers

*** Keywords ***
Yaml Locator Strategy
    [Arguments] ${browser}  ${criteria}     ${tag}  ${constraints}
    ${xpath}=     Set Variable    ${OR.${criteria}}
    ${retVal}=     Get Webelement    xpath=${xpath}
    [Return]    ${retVal}

正如您所见,通过自定义定位器关键字进行的抽象允许更清晰的代码,而不需要您提取变量以供以后重用。

当定位器被大量重用时,通常会通过对象存储库将定位器与机器人代码分离。另一种实现范例是使用页面对象模型。可以在中找到此类实现的示例

如果您仍然喜欢对象存储库方法,那么您可能会对使用
Selenium2Library
关键字感兴趣。下面是一个工作示例,它使用一个YAML文件作为输入或从Google获取搜索输入框和搜索按钮

ObjectRepo.yaml

OR: 
 searchbox: '//input[@id="lst-ib"]'
 searchbutton: '//button[@id="_fZl"]'
机器人脚本

*** Settings ***
Library    Selenium2Library
Variables    ObjectRepo.yaml

*** Test Cases ***
Yaml Object Repository
    [Setup]    Add Location Strategy    yro    Yaml Locator Strategy
    Open Browser    http://www.google.com    Chrome
    Input Text        yro=searchbox    Robot Framework
    Click Element     yro=searchbutton
    Sleep     3s
    [Teardown]    Close All Browsers

*** Keywords ***
Yaml Locator Strategy
    [Arguments] ${browser}  ${criteria}     ${tag}  ${constraints}
    ${xpath}=     Set Variable    ${OR.${criteria}}
    ${retVal}=     Get Webelement    xpath=${xpath}
    [Return]    ${retVal}

正如您可以通过自定义定位器关键字看到的那样,抽象允许更清晰的代码,并且不需要您提取变量以供以后重用。

上述解决方案工作得非常好。关于传递给Yaml定位器策略的参数,${criteria}、${tag}和${constraints}的值是什么,我可以再详细一点吗?。如何扩展Yaml定位器策略以接受链接和Id以及XPath?在示例中,参数
${criteria}
将包含值
searchbox
,即
yro=
之后的任何内容。参数
${browser}
将包含对活动Selenium2库的库引用。如果您有一个使用它的自定义python库,这将非常有用。另外两个,
${tags}
${contstraints}
我没有看到有人填写。所以我故意把它们当作空的。如果这个回答是你问题的答案,你能把它标记为空的,这样将来发现这个问题的人就知道什么对你有用了。我点击了向上箭头按钮,说它对我有用,但它不接受它,该公司表示,它需要至少15个声誉来展示自己。上述解决方案效果绝对不错。关于传递给Yaml定位器策略的参数,${criteria}、${tag}和${constraints}的值是什么,我可以再详细一点吗?。如何扩展Yaml定位器策略以接受链接和Id以及XPath?在示例中,参数
${criteria}
将包含值
searchbox
,即
yro=
之后的任何内容。参数
${browser}
将包含对活动Selenium2库的库引用。如果您有一个使用它的自定义python库,这将非常有用。另外两个,
${tags}
${contstraints}
我没有看到有人填写。所以我故意把它们当作空的。如果这个回答是你问题的答案,你能把它标记为空的,这样将来发现这个问题的人就知道什么对你有用了。我点击向上箭头按钮说它对我有用,但不是