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

时间:2017-06-09 07:03:42

标签: robotframework

如何直接将从一个关键字返回的值作为输入参数用于其他关键字(不将返回值赋给变量)

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

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

在Excel工作表中存储XPath的主要目的是避免在单个Element XPath更改时更改多个测试用例,只需在Excel Sheet上进行单个更改即可。

例如:  read_xpath从Excel工作表中读取值,Excel工作表有两列,一列variable name,第二列为xpath。函数read_xpath(element)variable name作为输入并返回xpath

xlread.py文件看起来像xlread.py code Excel表格看起来像Excel sheet

sample.robot 文件如下所示

${login_user_textctrl}=  read_xpath    username_textctrl

clear element text  ${login_user_textctrl}
Input text    ${login_user_textctrl}    admin

现在让我们检查一下我在机器人文件中使用read_xpath关键字的方式

我使用参数read_xpath调用了关键字username_texctrl,它返回用户名文本Control的xpath,它存储在变量${login_user_textctrl}中。现在输入文字${login_user_textctrl} admin工作正常。

以下代码

      clear element text    read_xpath     username_textctrl           

我知道,清除元素文本需要1个参数但提供了两个参数,有没有什么方法可以直接使用Keyword(read_xpath)返回的值作为其他关键字的输入,而不将其分配给任何变量?

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

${my element to clear}=    Evaluate    read_xpath("username_textctrl")    xlread  

请参阅文档here

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

答案 1 :(得分:0)

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

中找到此类实现的示例

如果您仍然喜欢对象存储库方法,那么使用Selenium2Library关键字Add Location Strategy可能会让您感兴趣。下面是一个工作示例,它使用YAML文件作为OR来从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}

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