机器人测试接收到与从 python 关键字发送的不同的 unicode

Robot test receiving different unicode than was sent from python keyword

我有机器人测试调用 python 函数递归地列出给定路径中的文件。该函数 returns 所有完整路径的列表,如下所示:

@keyword('List Files Recursively')
def list_files_rec_filtered(path, regexp_filter="^(?!\.).+$"):
    file_list = []
    filename_filter = re.compile(regexp_filter)
    for root, dirs, files in os.walk(path, topdown=True):
        for file in files:
            if filename_filter.match(file):
                file_list.append(os.path.abspath(os.path.join(root,file)))
    return file_list

当从机器人关键字调用此函数时,我可以看到我得到的结果与 python 中列表中的结果不同。

${files} = file_utils.List Files Recursively  ${path}  ${FILE_TYPES}

我有一个文件在返回之前名称中有ji (U+30B7, U+3099),但返回的值是ji (U+30B8)。我从机器人测试的日志文件中获取了两个字符,第一个是我用 python 的 print() 生成的调试消息,第二个是来自机器人自己的 TRACE Return: 值。

我了解到这是由于 APFS。 Robot 将 Unicode 字符串规范化为 NFC,但 Python 使用它从 APFS 获得的 NFD。没有真正的解决方案,只有解决方法。 Apple 需要修复 APFS 错误处理 NFC/NFD 冲突的方式,如下所示:https://eclecticlight.co/2017/04/06/apfs-is-currently-unusable-with-most-non-english-languages/ - OSX 上的几乎所有应用程序都受此影响,包括 Finder 和预览。