【问题标题】:How to ignore the fail case and continues to next value如何忽略失败案例并继续下一个值
【发布时间】:2018-05-19 21:50:33
【问题描述】:

我在下面有这段代码,我通过 ${txnExcel} 从 Excel 文件中循环值来搜索和比较值。但有时系统中不存在${txnExcel},所以在这种情况下,我想忽略失败,无需比较值,并通过跳过错误继续下一个${txnExcel}

open excel      ${PATH_EXCEL}
    ${exp_row_count}    get row count   Sheet1
    :For    ${i}    in range     1       ${exp_row_count}
    \   ${excel_index}      evaluate  ${i}+1
    \   ${txnExcel}    Read Cell Data By Name    Sheet1    B${excel_index}
    \   ${ServiceTypeExcel}    Read Cell Data By Name    Sheet1    C${excel_index}
    \   ${TransferAmountExcelOrigin}    Read Cell Data By Name    Sheet1    D${excel_index}
    \   ${CurrencyExcel}    Read Cell Data By Name    Sheet1    E${excel_index}
    \   ${TransferAmountExcel}  set variable    ${TransferAmountExcelOrigin} ${CurrencyExcel}
#=======================================================================================
    \   input text       name=id_or_tsn     ${txnExcel}
    \   click button    name=Submit
    \   wait until element is visible   xpath=/html/body/div[2]/div[2]/div/div/div/div[1]/div[2]    5s

   #===========================Compare Transaction Element================================================
   \   ${txnCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[1]/div[2]
   \   ${ServiceTypeCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[3]/div[2]/span
   \   ${TransferAmountCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[5]/div[2]/span
   \   ${CurrencyCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[4]/div[2]
   \   should be equal as strings    ${txnExcel}    ${txnCompare}       invalid TXN comparison[${i}]
   \   should be equal as strings    ${ServiceTypeExcel}    ${ServiceTypeCompare}       invalid ServiceType comparison[${i}]
   \   should be equal as strings    ${TransferAmountExcel}    ${TransferAmountCompare}       invalid Transfer Amount comparison[${i}]
   \   should be equal as strings    ${CurrencyExcel}    ${CurrencyCompare}       invalid Currency comparison[${i}]
#============================End Compare Transaction Element====================================================

提前感谢您的回答,如果您不清楚我的问题,请告诉我。

【问题讨论】:

  • 只是一般的观察:您的 xpath 是完整路径。这是一种我们经常发现随着时间的推移非常不稳定的方法。我的建议是使用相对路径并使用 ID、名称、CSS 类或其他属性等标识符来创建唯一引用。如果不能,请与开发团队联系,为对您很重要的关键字段实施它们。

标签: selenium robotframework qa


【解决方案1】:

我理解您的问题的方式是您循环浏览从 Excel 获取的项目。有时 Excel 中的项目在应用程序中不存在。如果是这种情况,则跳过对该项目的检查并从 excel 中获取下一个项目。

正如@pankaj mishra 正确引用的那样,应该使用关键字Run Keyword and Ignore Error。此关键字输出 2 个值(这就是为什么您在其前面看到 2 个变量的原因)。第一个包含状态,第二个包含实际值。

然后由关键字 Continue For Loop 使用,当关键字返回错误 (FAIL) 时,它会中断此循环。然后跳过所有随后的检查(由记录步骤表示)。

*** Test Cases ***
TC
    @{list}    Create List    ${3}    ${6}    ${15}   ${21}
    Log To Console  \n  
    :FOR    ${id}    IN    @{list}
    \    ${status}    ${result}    
    \    ...    Run Keyword And Ignore Error    Mock Element Exists    ${id}
    \    
    \    Continue For Loop If    '${status}' == 'FAIL'
    \    Log To Console   No Failure for ${id}

*** Keywords ***
Mock Element Exists
    [Arguments]    ${id}
    &{dic}    Create Dictionary    3=1    6=2    18=6    21=7
    [Return]   ${dic['${id}']}

【讨论】:

  • 你能检查我的编辑,看看它是否按照你的建议正常
  • 如果这个答案有帮助,你能把它标记为答案吗?
【解决方案2】:

在处理 ${txnExcel} 时,您可以在代码中添加 if 条件。

只需用您想要的语言检查如下。下面的代码只是一个逻辑。用你想要的语言写出来。

if(${txnExcel} != NULL){
   // put your compare code inside this if statement.
}

【讨论】:

    【解决方案3】:

    您可以使用 Run 关键字并忽略错误或 Run Keyword And Continue On Failure。 有关这些关键字的详细信息,请参阅

    http://robotframework.org/robotframework/latest/libraries/BuiltIn.html

    这里也有关于这些关键字的一个很好的例子

    How to ignore Get Table Text from Cell, if xpath of cell not match

    在您的代码中,您可以使用以下行

         \   ${status}    ${result}
         \    ...   Run Keyword And Ignore Error    input text       name=id_or_tsn     ${txnExcel}
         \    Continue For Loop If    '${status}' == 'FAIL'
    

    最后一次跳过 ${txnexcel} 的错误

    Run Keyword And Continue On Failure    Should Be Equal As Strings  
      ${txnExcel}    ${txnCompare}       invalid TXN comparison[${i}]
    

    即使没有提供值或变量${txnExcel},也会继续下一个KW。

    【讨论】:

    • 你好,对不起兄弟,我的意思是 excel 文件中的 ${txnExcel} 很好。但问题是当我输入 ${txnExcel} 然后我得到响应 not found 或 sth ,那个。
    • 这行不通兄弟,但现在我有解决方案了。我已经发布为答案。
    【解决方案4】:

    现在适合我的解决方案在这里。

    open excel      ${PATH_EXCEL}
        ${exp_row_count}    get row count   Sheet1
        :For    ${i}    in range     1       ${exp_row_count}
        \   ${excel_index}      evaluate  ${i}+1
        \   ${txnExcel}    Read Cell Data By Name    Sheet1    B${excel_index}
        \   ${ServiceTypeExcel}    Read Cell Data By Name    Sheet1    C${excel_index}
        \   ${TransferAmountExcelOrigin}    Read Cell Data By Name    Sheet1    D${excel_index}
        \   ${CurrencyExcel}    Read Cell Data By Name    Sheet1    E${excel_index}
        \   ${TransferAmountExcel}  set variable    ${TransferAmountExcelOrigin} ${CurrencyExcel}
        #=======================================================================================
        \   input text       name=id_or_tsn     ${txnExcel}
        \   click button    name=Submit
        \   ${found_txn}    run keyword and return status   wait until element is visible   xpath=/html/body/div[2]/div[2]/div/div/div/div[1]/div[2]    5s
        \   ${error_message}    run keyword unless  ${found_txn}    get text    xpath=/html/body/div[2]/div[2]
        \   run keyword and continue on failure     element should be visible       xpath=/html/body/div[2]/div[2]/div/div/div/div[1]/div[2]
        \   run keyword unless      ${found_txn}        continue for loop
        #===========================Compare Transaction Element================================================
        \   ${txnCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[1]/div[2]
        \   ${ServiceTypeCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[3]/div[2]/span
        \   ${TransferAmountCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[5]/div[2]/span
        \   ${CurrencyCompare}  get text   xpath=/html/body/div[2]/div[2]/div/div/div/div[4]/div[2]
        \   should be equal as strings    ${txnExcel}    ${txnCompare}       invalid TXN comparison[${i}]
        \   should be equal as strings    ${ServiceTypeExcel}    ${ServiceTypeCompare}       invalid ServiceType comparison[${i}]
        \   should be equal as strings    ${TransferAmountExcel}    ${TransferAmountCompare}       invalid Transfer Amount comparison[${i}]
        \   should be equal as strings    ${CurrencyExcel}    ${CurrencyCompare}       invalid Currency comparison[${i}]
    

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2013-03-17
      • 2015-05-12
      • 2010-10-09
      • 2020-06-30
      • 1970-01-01
      相关资源
      最近更新 更多