Robotframework 如何在另一个用户定义关键字中引用robot framework用户定义关键字

Robotframework 如何在另一个用户定义关键字中引用robot framework用户定义关键字,robotframework,Robotframework,我对机器人框架非常陌生,才几天大。。。 我希望使用机器人框架自动化我们的一个web应用程序,我正在使用页面对象模型设置,其中 我在文件(Resources/fileKeywords.robot)中定义了关键字 我还在一个单独的文件夹(PageObjects/locators.py)中有一个location.py文件,其中包含web元素 测试用例在一个名为“TestCases”的单独文件夹中定义。 现在我的应用程序中出现了这样的情况。 我必须选择一个CSV文件在应用程序中上载。 为此,我必须单击一

我对
机器人框架非常陌生
,才几天大。。。 我希望使用
机器人框架
自动化我们的一个web应用程序,我正在使用页面对象模型设置,其中

  • 我在文件
    (Resources/fileKeywords.robot)中定义了关键字
  • 我还在一个单独的文件夹
    (PageObjects/locators.py)
    中有一个
    location.py
    文件,其中包含web元素
  • 测试用例在一个名为
    “TestCases”的单独文件夹中定义。
  • 现在我的应用程序中出现了这样的情况。 我必须选择一个
    CSV
    文件在应用程序中上载。 为此,我必须单击一个浏览按钮,该按钮将打开windows文件打开对话框,并从该对话框中选择特定文件夹中的
    CSV
    文件,然后在文件对话框中单击“打开”以完成文件选择。 选择文件后,会有一个按钮来“导入”
    所选文件。 之后,文件将显示在一个表中,我必须单击相应的上载文件以继续

    为此,我定义了几个像这样的关键字 ***关键词***

    File name for Upload
       ${CSVfileName}=  read_csv_file   ${CsvFileFolder} #read_csv_file is a python class which returns csv 
         file. Let's say acb.csv
    
    Click uploaded file
       click element ${CSVfileName}
    
    Click upload file
    中,我试图引用
    html
    元素中的
    ${CSVfileName}
    标量变量来对上传的文件执行单击操作
    (比如xpath://span[包含(text(),'abc.csv')
    ] 但我得到了一个错误,它说“变量定义未找到”

    我可以将两者放在同一个关键字下,并从我的测试用例中调用该关键字。但是为了更清晰,我想将它们分开

    我只想知道: 如何从另一个关键字部分中的关键字(在我的情况下为“上载文件名”)引用用户定义变量(在我的情况下为
    ${CSVfileName}
    )(在我的情况下为“单击上载文件”)

    对不起,如果我有点困惑或如果它不属于正确的论坛。
    感谢您的帮助。

    理解您的意思有点让人困惑。但我会尝试,如果因为我不理解某些内容而不正确,请在评论中这样说

    我想你有两个关键词:

    *** Keywords ***
    File name for Upload
        ...
        ${CSVfileName}= ...
        ...
    
    Click uploaded file
        ...
    
    现在,如果我理解了,您可以在
    文件名中创建变量
    ${CSVfileName}
    ,以便上传
    ,并且您希望在
    中使用变量,单击上传的文件

    在这种情况下,您大约有两种选择:

    1/您可以使用关键字
    设置全局变量

    *** Keywords ***
    File name for Upload
        ...
        Set Global Variable    ${CSVfileName}    ...
        ...
    
    
    Click uploaded file
        ...
        ${CSVfileName}= ...
        ...
    
    缺点是您需要确保每次使用变量之前都会调用上载的
    文件名
    。变量声明和赋值也隐藏在关键字中,这在我看来不太清楚

    2/您从
    文件名返回以进行上载
    并参数化
    单击上载的文件

    *** Keywords ***
    File name for Upload
        ...
        ${CSVfileName}    ...
        [Return]    ${CSVfileName}
        ...
    
    Click uploaded file
        [Arguments]    ${CSVfileName}
        ...
    
    您很可能会在这样的测试中使用它:

    *** Test Cases ***
    Upload File Test
        ...
        ${CSVfileName}=    File name for Upload
        Click uploaded file    ${CSVfileName}
        ...    
    

    另一种解决方案使它更灵活,也更清晰。您会立即看到,在实际调用关键字之前,您需要提供一些参数。可以按任何顺序调用关键字,这使它们更加独立。

    要了解您的意思有点混乱。但我会尝试,如果它不正确,因为我不理解它的含义有什么事,在评论里说吧

    我想你有两个关键词:

    *** Keywords ***
    File name for Upload
        ...
        ${CSVfileName}= ...
        ...
    
    Click uploaded file
        ...
    
    现在,如果我理解了,您可以在
    文件名中创建变量
    ${CSVfileName}
    ,以便上传
    ,并且您希望在
    中使用变量,单击上传的文件

    在这种情况下,您大约有两种选择:

    1/您可以使用关键字
    设置全局变量

    *** Keywords ***
    File name for Upload
        ...
        Set Global Variable    ${CSVfileName}    ...
        ...
    
    
    Click uploaded file
        ...
        ${CSVfileName}= ...
        ...
    
    缺点是您需要确保每次使用变量之前都会调用上载的
    文件名
    。变量声明和赋值也隐藏在关键字中,这在我看来不太清楚

    2/您从
    文件名返回以进行上载
    并参数化
    单击上载的文件

    *** Keywords ***
    File name for Upload
        ...
        ${CSVfileName}    ...
        [Return]    ${CSVfileName}
        ...
    
    Click uploaded file
        [Arguments]    ${CSVfileName}
        ...
    
    您很可能会在这样的测试中使用它:

    *** Test Cases ***
    Upload File Test
        ...
        ${CSVfileName}=    File name for Upload
        Click uploaded file    ${CSVfileName}
        ...    
    
    另一种解决方案使它更灵活,也更清晰。您会立即看到,在实际调用关键字之前,您需要提供一些参数。可以按任何顺序调用关键字,这使它们更加独立