Katalon Studio自定义关键字方法内WebUI操作如何在日志中记录执行步骤
我们在多个页面会遇到相同的组件,且通常需要覆盖被测站点指定页面的多个测试场景。基于这一点及其他需求,我将页面操作相关逻辑分别迁移到了Keywords下的GeneralWebUIUtils工具类和页面对象中。
举例来说,我们定义了如下GeneralWebUIUtils类:
package com.xxx.utils import com.kms.katalon.core.testobject.TestObject import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI public final class GeneralWebUIUtils { //... public static void HandleAutoComplete(TestObject textField, String input, TestObject loader, TestObject firstDropdownOption) { WebUI.click(textField) WebUI.setText(textField, input) WebUI.waitForElementVisible(loader, 3) WebUI.waitForElementNotVisible(loader, 3) WebUI.waitForElementNotPresent(firstDropdownOption, 3) WebUI.waitForElementVisible(firstDropdownOption, 3) WebUI.click(firstDropdownOption) } }
在某个测试用例中,我需要处理自动完成场景,因此会调用该类的GeneralWebUIUtils.HandleAutoComplete方法。
目前我遇到了该方法的性能问题,之前还出现过元素过时异常。这些都是典型的测试用例问题,只是逻辑现在被迁移到了包下。但我查看日志查看器时,它不会像展示测试用例内原生编写的方法步骤那样,展示该自定义方法内部的执行步骤:
这就导致我无法通过日志排查问题、定位性能瓶颈,只能使用调试模式,而调试模式本身也存在诸多问题(比如强制等待会导致调试会话不稳定)。
请问如何设置才能让Katalon像展示测试用例本地方法中的调用一样,在日志中记录自定义关键字方法内部的各类WebUI关键字执行步骤?
你可以通过以下两种方案实现需求:
方案1:使用官方注解+开启内置日志开关(推荐)
这是Katalon原生支持的实现方式,日志展示效果和测试用例内直接编写的步骤完全一致:
- 给自定义工具类的目标方法添加
com.kms.katalon.core.annotation.Keyword注解,将其注册为Katalon全局关键字 - 打开Katalon Studio → 偏好设置 → Katalon → 执行设置 → 日志记录分类,勾选在日志中显示关键字内部执行步骤选项
- 保存设置后重新执行测试即可,自定义方法内部所有WebUI关键字的执行情况都会完整输出到日志查看器中。
方案2:手动埋点日志(适用于非注册关键字的工具类)
如果你的工具类方法不需要注册为全局关键字,可以在每一步操作前后手动调用日志工具输出信息:
import com.kms.katalon.core.util.KeywordUtil public static void HandleAutoComplete(TestObject textField, String input, TestObject loader, TestObject firstDropdownOption) { KeywordUtil.logInfo("开始执行自动完成操作,输入值:${input}") KeywordUtil.logInfo("点击输入框") WebUI.click(textField) KeywordUtil.logInfo("填入文本:${input}") WebUI.setText(textField, input) KeywordUtil.logInfo("等待加载控件出现,超时3s") WebUI.waitForElementVisible(loader, 3) KeywordUtil.logInfo("等待加载控件消失,超时3s") WebUI.waitForElementNotVisible(loader, 3) KeywordUtil.logInfo("等待下拉选项加载完成,超时3s") WebUI.waitForElementVisible(firstDropdownOption, 3) KeywordUtil.logInfo("点击第一个下拉选项") WebUI.click(firstDropdownOption) KeywordUtil.logInfo("自动完成操作执行完毕") }
这种方式输出的自定义日志也可以清晰定位每一步的执行耗时和结果。
另外补充问题优化建议:你当前代码中连续写了waitForElementNotPresent和waitForElementVisible两个相反的等待逻辑,会导致不必要的等待耗时,甚至下拉选项加载过快时waitForElementNotPresent会直接超时失败,建议删除多余的waitForElementNotPresent逻辑即可缓解性能和元素异常问题。
内容的提问来源于stack exchange,提问作者Mike Warren

