首页 > 解决方案 > 如何在另一个用户定义的关键字中引用机器人框架用户定义的关键字

问题描述

我很新robot framework,刚出生几天......我正在寻找使用自动化我们的一个网络应用程序Robot Framework,我正在使用页面对象模型设置,其中

  1. 我在文件中定义了关键字(Resources/fileKeywords.robot)
  2. location.py在一个单独的文件夹中也有一个文件,(PageObjects/locators.py)其中包含 Web 元素。
  3. 测试用例定义在一个名为"TestCases"

现在我的应用程序中有这样的情况。我必须CSV在应用程序中选择要上传的文件。为此,我必须单击一个浏览按钮,该按钮将打开 windows 文件打开对话框,从那里它将CSV从特定文件夹中选择一个文件,然后在文件对话框中单击“打开”以完成文件选择。选择文件后,有一个按钮指向"Import"所选文件。之后,该文件将显示在表格中,我必须单击相应的上传文件才能继续。

为此,我定义了一些像这样的关键字***关键字***

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 uploaded file,我试图引用元素${CSVfileName}内的标量变量html以对上传的文件执行单击操作 (like xpath://span[contains(text(),'abc.csv')] 但我收到错误。它说“未找到变量定义”

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

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

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

标签: robotframework

解决方案


找到你的意思有点令人困惑。但是我会尝试,如果它不正确,因为我不明白某些东西,请在评论中说出来。

我认为你有这两个关键字:

*** Keywords ***
File name for Upload
    ...
    ${CSVfileName}= ...
    ...

Click uploaded file
    ...

现在,如果我理解的话,您可以在 in 中创建变量${CSVfileName}File name for Upload并且您想在 .in 中使用该变量Click uploaded file

在这种情况下,您有大约 2 个选项:

1 /您将变量定义File name for Upload为带有关键字的全局变量Set Global Variable

*** Keywords ***
File name for Upload
    ...
    Set Global Variable    ${CSVfileName}    ...
    ...


Click uploaded file
    ...
    ${CSVfileName}= ...
    ...

缺点是您需要确保File name for Upload在每次使用该变量之前始终调用它。变量声明和赋值也隐藏在关键字中,这在我看来有点不太清楚。

2/ 你返回File name for Upload并参数化Click uploaded file

*** 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}
    ...    

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


推荐阅读