迁移到脚本对象映射:常见转换问题

“squishide”提供了一个基本的转换向导,用于将测试套件从基于文本的对象映射转换为新的基于脚本的对象映射。您可以在测试套件设置的“对象映射”部分以及对象映射编辑器的右上角找到这个功能。该转换是一项非常基础的尽力而为的操作,并不能保证能够生成可工作的测试套件。以下是一些常见的转换问题。

含有符号名称的真正名称

当测试脚本使用含有符号名称的真正名称时,转换将会把真正名称内的符号名称替换成脚本符号名称,这将破坏测试脚本的执行。

以下是一个不会正确转换的代码示例

clickButton(waitForObject("{text='New' type='QToolButton' unnamed='1' visible='1' window=':Address Book_MainWindow'}"))

转换将产生以下结果

clickButton(waitForObject("{text='New' type='QToolButton' unnamed='1' visible='1' window=names.address_Book_MainWindow}"))

为了解决这个问题,可以将旧的真正名称手动转换为脚本真正名称

clickButton(waitForObject({"text": "New", "type": "QToolButton", "unnamed": "1", "visible": "1", "window": names.address_Book_MainWindow}))

接受符号名称作为参数的自定义函数

现有的测试框架可能已经使用了自定义脚本对象来识别GUI元素(例如,在使用页面对象时),测试脚本中可能有便利函数同时与符号名称和自定义脚本对象一起使用。由于转换将简单地用脚本符号名称替换所有符号名称,所以所有使用符号名称的自定义函数也需要支持脚本符号名称,否则测试脚本将无法正确执行。

以下是一个可能不会正确转换的代码示例

def customVerification(objectOrName):
    if isinstance(objectOrName,str):
        #do something with the symbolic name
    else:
        #do something else

def main():
    startApplication("addressbook")
    customVerification(":Address Book.New_QToolButton")

转换将产生以下结果

def customVerification(objectOrName):
    if isinstance(objectOrName,str):
        #do something with the symbolic name
    else:
        #do something else

def main():
    startApplication("addressbook")
    customVerification(names.address_Book_New_QToolButton)

为了解决这个问题,需要手动修改函数代码以与squish使用的脚本真实名称的字典兼容。

在脚本语言中需要转义的字符的符号名称

当符号名称包含在脚本语言中需要转义的字符,但在对象映射本身中不需要转义时,名称将不会被替换(例如,Perl中的@需要转义,但不在对象映射中)。

此Perl代码将不会转换,因为对象映射条目将是“[email protected]_Item”。

test::compare(waitForObject(":John.Doe\@froglogic.com_Item")->text, "John.Doe\@froglogic.com")

为了解决这个问题,名称将需要手动转换。

©2024 测试公司有限公司。文件中的文档贡献是各自拥有者的版权。
提供的文档在Free软件基金会发表的《GNU自由文档许可协议》的第1.3版下提供。
Qt及其相关标志是芬兰和/或其他国家和地区的Qt公司商标。所有其他商标都是其各自所有者的财产。