附录F:错误代码及解释
可以点击错误代码查看错误的解决方案。
错误代码 | 错误名称 | 错误解释 |
---|---|---|
1001 | ObjectNotExist | 没有找到对象,或者对象不存在。通常是由于目标控件不可见,或是控件内部变化引起的识别属性不匹配。前者常见于如未展开的下拉框选项、树形图节点、子菜单栏等等;后者常见于对象的标识属性中包含一些动态的、可变的参数,导致控件操作或应用重启后无法匹配。 |
1002 | ObjectIsOutOfScreen | 控件超出屏幕。通常是由于目标控件不在屏幕中,可能由于目标窗口没有全屏运行或者部分位于屏幕外。 |
1003 | CannotPerformThisOperation | 无法执行该操作。 |
1004 | ObjectIsReadOnly | 对象是只读的无法修改。 |
1005 | ItemNotExistInList | 项目不存在。在使用项目名索引List、ComboBox等存在多个子控件的控件时,使用控件名字没有匹配到合适的项目。 |
1006 | OutOfRange | 索引超出数组长度,使用的索引超出了列表或树的长度。 |
1007 | Others | 其它原因。 |
1008 | InvalidArgument | 不合法的参数。 |
1009 | CannotFindTestObjectInModel | 在模型文件中无法找到相关的测试对象。通常是对象名词拼错,或者模型文件中的更改未保存。 |
1010 | InvalidRunContext | 不合法的运行上下文。 |
1011 | InvalidObjectType | 不合法的对象类型。 |
1012 | NoLicenseAndOutOfFreeQuota | 到达许可版本的最大限制。即对象识别、图像识别等API的调用次数到达上限,需要升级许可类型来解除限制。 |
1013 | DuplicateTestObjectFound | 模型树中有重名的控件对象。 |
1014 | InvalidTestObjectType | 不合法的测试对象类型。通常是由于获取对象的方法与对象的类型不一致。 |
1015 | InvalidConditionString | 不合法的条件字符串。 |
1016 | StringTooLong | 字符串太长。 |
1017 | DontKnowHowToHandleTheCall | 未知的调用请求。 |
1018 | ApplicationNotExist | 应用不存在。 |
1019 | MissingOrInvalidPatternImage | 图案模板图片不存在或格式不正确。 |
1020 | FileNotExistOrInvalid | 文件不存在或不正确。 |
1021 | InsufficientPermission | 没有足够的权限。 |
1022 | InvalidModelObject | 不正确的模型对象。 |
1023 | NeedLicense | 该操作需要许可证书. 可联系我们获得试用许可或购买。 |
1024 | InvalidModelImage | 模型中对象的截屏文件不存在 |
1025 | ItemNotInView | 该项目在控件可视区域外 |
1026 | PluginNotLoaded | 无法连接到应用,相关自动化插件可能未加载 |
1027 | PluginNotLoaded | 无法连接到远程地址,可能是地址有误,或者远程设备不在线 |
1028 | InvalidFileFormat | 文件格式错误 |
1029 | CannotLaunchProcess | 启动应用失败,可能是路径不存在或不合法。 |
错误诊断和解决方案
1001: ObjectNotExist,对象不存在,子对象名称的父对象父对象名称
最常见的错误信息,没有找到对象,或者对象不存在。通常是由于:
- 目标控件不可见,常见于如未展开的下拉框选项、树形图节点、子菜单栏等等;
- 控件内部变化引起的识别属性不匹配,常见于对象的标识属性中包含一些动态的、可变的参数,导致控件操作或应用重启后无法匹配。
无论是上述哪种情况,都可以打开模型管理器来诊断。假设该控件的对象名称为目标对象
。
1. 还原错误现场
当出现对象不存在的错误以后,不要关闭被测应用,打开模型管理器(点击项目中的.tmodel
文件)进行诊断。
2. 定位问题原因
打开模型管理器后,在模型树中选中目标对象
并高亮。根据高亮(如果目标是右键菜单、下拉框选项一类的派生控件,可以用延迟执行高亮)的情况进行下一步诊断:
- (小概率情况)可以高亮。这种情况说明控件是可以被正确匹配,则问题出现在脚本中,检查操作该控件之前,是否有使目标控件正确展开。如:目标控件是嵌套的树节点,就要先展开到树节点可见为止(比如调用
scrollIntoView()
方法)。 - (大概率情况)无法高亮。这个时候最简单的方法,就是一层一层的向上高亮
目标对象
的父控件们,找到从哪一层级高亮开始出现异常(无法高亮或高亮错位)。如果只有目标对象
无法高亮,那么可以直接调整目标对象
的识别属性。
3. 调整对象属性
如果目标对象
无法高亮,可以检查标识属性是否不合理,比如动态属性。
动态属性即控件在应用每次重启、运行过程中会频繁受到影响进而改变的属性,常见的比如应用窗口的
title
属性常常会根据打开的项目或文件改变,就不适合作为标识属性。
对于这些动态的标识属性,可以将其直接删掉;或者在模型管理器中修改匹配模式,从而进行部分属性的匹配。
4. 添加索引
如果目标对象
高亮的位置不正确,那很可能是因为应用中存在很多属性与目标对象
相同的控件。可以在模型管理器的状态栏中看到具体的匹配个数。
在匹配到多个控件的情况下,可以引入索引属性index
,该属性代表操作匹配到多个控件时的第几个结果。默认索引index
为0,也就是会自动高亮和操作第一个控件。
也可以在侦测时使用自动添加索引功能来完成这些工作。
1002: ObjectIsOutOfScreen 控件超出屏幕。
通常是由于目标控件不在屏幕中,可能由于目标窗口没有全屏运行或者窗口有部分位于屏幕外。
在一些桌面应用框架的底层实现中,菜单控件从来不会消失,而是移出屏幕,这个时候选择高亮该菜单的话,会发现不是提示1001: ObjectNotExist错误而是当前的1002错误。
1003: CannotPerformThisOperation 无法执行该操作。
CukeTest对于某些桌面应用框架提供了增强方法,这些方法无法在支持的框架以外调用,否则就会提示当前的1003错误。因为这些方法都是增强方法,因此也可以使用其它方法的组合来完成一样的任务。
1004: ObjectIsReadOnly 对象是只读的无法修改。
对无法编辑的文本控件调用set()
方法时会出现。如果你确认目标控件允许手动编辑,需要检查是否侦测到了正确的可编辑控件(文本框Edit
、多行文本框Document
或TextArea
)。
如果目标是需要双击或进行其它操作后才可以编辑的控件,可以在侦测前按住
CTRL
键操作,操作完成后松开CTRL
键进行侦测。(参考使用Ctrl键侦测弹出/派生控件。)
1005: ItemNotExistInList 项目不存在。
在使用项目名搜索并操作List、ComboBox等存在多个子控件的控件时,使用控件名字没有匹配到合适的项目。
如果控件中的内容不是一次性加载,而是在滚动到底部才会继续加载更多的内容,那么这个错误将更容易出现。
对于这类延时加载(或者叫懒加载、异步加载)的列表,可以参考演练:操作Qt应用中的List中的自动化方式。
1006: OutOfRange 索引超出数组长度。
在使用项目索引来匹配并操作List、ComboBox等存在多个子控件的控件时,使用的索引超出了列表或树的长度。
如果控件中的内容不是一次性加载,而是在滚动到底部才会继续加载更多的内容,那么这个错误将更容易出现。
对于这类延时加载(或者叫懒加载、异步加载)的列表,可以参考演练:操作Qt应用中的List中的自动化方式。
1007: Others 其它原因。
无法分类的错误原因,可以向我们报告问题,并附上具体的错误报告信息。
1008: InvalidArgument 不合法的参数。
1009: CannotFindTestObjectInModel 在模型文件中无法找到相关的测试对象。通常是对象名词拼错,或者模型文件中的更改未保存。
1010: InvalidRunContext 不合法的运行上下文。
1011: InvalidObjectType 不合法的对象类型。
1012: NoLicenseAndOutOfFreeQuota 到达许可版本的最大限制。即对象识别、图像识别等API的调用次数到达上限,需要升级许可类型来解除限制。
1013: DuplicateTestObjectFound 模型树中有重名的控件对象。
1014: InvalidTestObjectType 不合法的测试对象类型。通常是由于获取对象的方法与对象的类型不一致。
1015: InvalidConditionString 不合法的条件字符串。
1016: StringTooLong 字符串太长。
1017: DontKnowHowToHandleTheCall 未知的调用请求。
1018: ApplicationNotExist 应用不存在。
在Qt自动化时,如果出现了这个错误,可能是以下几个原因中的某个导致的。
被测应用的确未启动
如果被测应用的确没启动,那么可能是:
- 被测应用路径不正确或被测应用不支持当前的启动方式。
被测应用的确成功启动了
如果被测应用启动了但是扔报这个错误,则说明启动过程中Qt Agent没有成功加载,有以下几种可能的原因。
- 当前CukeTest实例的Qt服务未启动,通过检查主界面左下角状态栏的
Qt: 0
是否显示来判断,如果未启动可以点击重新启动。 - 被测应用的Qt Agent没有成功加载,没有加载的情况有很多种可能。可以尝试手动加载Qt Agent,如果能够加载,那么可以在脚本中使用
winHookProcess()
方法来再次加载Qt Agent;如果不能够加载,说明被测应用无法加载Qt Agent,请寻求技术支持。
1019: MissingOrInvalidPatternImage 图案模板图片不存在或格式不正确。
1020: FileNotExistOrInvalid 文件不存在或不正确。
1021: InsufficientPermission 没有足够的权限。
1022: InvalidModelObject 不正确的模型对象。
1023: NeedLicense: 该操作需要许可证书. 可联系我们获得试用许可或购买。
1024: InvalidModelImage: 模型中对象的截屏文件不存在
1025: ItemNotInView: 该项目在控件可视区域外
1026: PluginNotLoaded: 无法连接到应用,相关自动化插件可能未加载
1027: PluginNotLoaded: 无法连接到远程地址,可能是地址有误,或者远程设备不在线
1028: InvalidFileFormat: 文件格式错误
1029: CannotLaunchProcess: 无法启动应用
使用Util.launchProcess()
或QtAuto.launchQtProcess()
方法时,由于传入的路径不正确,或目标路径的文件无法被执行。大多数时候都是由于路径中的反斜杠\
引起的,由于Windows操作系统默认的文件路径使用反斜杠\
作为分隔符,在脚本中使用时需要转义,因此假设目标应用路径为C:\Windows\notepad.exe
。那么它的启动脚本应该写作:
Util.launchProcess("C:\\Windows\\notepad.exe")
为了避免手写路径出错,可以使用工具箱中提供的启动应用功能块。