是否有任何机器人框架关键字来对具有特殊字符的字符串列表进行排序?

Poo*_*vin 2 sorting robotframework

我有一个包含特殊字符的字符串列表,列表如下:

1.Kevin_richard
2.Dan_ronald
3.Daniel_white
4.David_jacob
5.eddie_bacon
Run Code Online (Sandbox Code Playgroud)

为了按升序对列表进行排序,我使用了集合库中的Sort List(字符串按字母顺序排序,数字按数字顺序排序)关键字。

*** Settings ***

*** Test Cases ***
TC Title
  Sort the given list of usernames in ascending order

*** Keywords ***
Sort the given list of usernames in ascending order
  ${sorted_order_asc}=  Copy List  ${default_order_username}    //default order represents list of five user names
  Sort List  ${sorted_order_asc}
Run Code Online (Sandbox Code Playgroud)

执行上述脚本时,列表按以下顺序排序:

  1. Daniel_white
  2. 丹_罗纳德
  3. 大卫雅各布
  4. 埃迪培根
  5. 凯文·理查德

但这不是预期的排序顺序。在上面的列表中,Dan_ronald 必须位于列表的顶部。排序列表忽略特殊字符,因此在跳过 Dan 并检查下一个字母(r vs i)后划线。因此,Daniel_white 位居榜首。

任何帮助解决这个问题的帮助将不胜感激。

A. *_*tra 5

这可以通过在下面的示例中使用 python 函数最容易地实现,创建自定义机器人关键字,该关键字采用具有正确字符排序顺序的字符串。然后使用它来相应地对列表项进行排序。

*** Settings ***
Library    Collections

*** Variables ***
@{list}
    ...    Kevin_richard
    ...    Dan_ronald
    ...    Daniel_white
    ...    David_jacob
    ...    eddie_bacon

*** Test Cases ***
Standard Sorting
    ${sorted_list}    Sort List Custom    ${list}

    ${result}    Create List
    ...    Dan_ronald
    ...    Daniel_white
    ...    David_jacob
    ...    Kevin_richard
    ...    eddie_bacon    

    Lists Should Be Equal    ${sorted_list}    ${result}   


Reverse Sorting
    ${alphabet_reverse}    Set Variable    zyxwvutsrqpomnlkjihgfedcbaZYXWVUTSRQPOMNLKJIHGFEDCBA9876543210_${SPACE}
    ${sorted_list}   Sort List Custom    ${list}    ${alphabet_reverse}

    ${result}    Create List
    ...    eddie_bacon
    ...    Kevin_richard
    ...    David_jacob
    ...    Daniel_white
    ...    Dan_ronald


    Lists Should Be Equal    ${sorted_list}    ${result}        

*** Keywords ***
Sort List Custom
    [Documentation]
    ...    Sort a list using a custom sort order
    ...    
    ...    This keyword sorts a list according to a custom sort order 
    ...    when given, or the default one when not provided. 
    ...    
    ...    Arguments:
    ...    - input_list    {list}      a list of strings to be sorted.
    ...    - alphabeth     {string}    a string of characters according to which order they
    ...                                must be sorted.
    ...    
    ...    Returns:        {list}      the sorted list.
    ...    
    [Arguments]    ${input_list}    ${alphabet}=${SPACE}_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

    ${ns}    Create Dictionary    alphabet=${alphabet}    input_list=${input_list}

    ${sorted}    Evaluate     sorted(input_list, key=lambda word: [alphabet.index(c) for c in word])     namespace=${ns} 
    [Return]    ${sorted}
Run Code Online (Sandbox Code Playgroud)