sendkeys()方法无法接收实例变量值,报错待发送按键需为非空CharSequence
错误原因
Keys to send should be a not null CharSequence 报错的核心原因是调用sendKeys(data)时,传入的data变量为null。你的场景下触发这个问题通常有三个常见诱因:
- 两个关键字方法的调用顺序错误:还没执行
getFirstRecord()给data赋值,就先执行了setSearchData() - 实例变量生命周期问题:你定义的
data是类的实例成员变量,Katalon每次调用@Keyword注解的方法时,可能会创建新的类实例,导致之前给data赋的值被重置为null getFirstRecord()内部赋值失败:比如查找元素超时返回空列表、目标元素的getText()本身返回null,都会导致data没有被正常赋值
解决方案
方案1:将变量改为静态变量(最适配你的场景)
将data改为静态成员变量,保证该变量在类的所有实例中共享,不会因为新建实例丢失赋值,无需修改方法返回值即可解决问题,修改后的代码如下:
static String data; // 加static修饰 @Keyword def getFirstRecord(TestObject listData) { List<WebElement> firstRecord = WebUiCommonHelper.findWebElements(listData, 20); if(!firstRecord.isEmpty()){ String text = firstRecord.get(0).getText(); data = text == null ? "" : text; // 规避getText返回null的情况 }else{ data = ""; // 也可以在这里加日志输出,提示未找到目标元素 } } @Keyword def setSearchData(TestObject obj) { WebElement txtSearchBox = WebUiCommonHelper.findWebElement(obj, 20); txtSearchBox.sendKeys(data == null ? "" : data); }
方案2:强制调用顺序+异常校验
如果不想用静态变量,按照以下规则调整即可:
- 测试用例中必须先调用
getFirstRecord(),再调用setSearchData(),不能颠倒顺序 - 代码中增加非空校验,提前暴露问题:
String data; @Keyword def getFirstRecord(TestObject listData) { List<WebElement> firstRecord = WebUiCommonHelper.findWebElements(listData, 20); if(firstRecord.isEmpty()){ throw new RuntimeException("未找到匹配的列表元素,无法给data赋值"); } data = firstRecord.get(0).getText(); if(data == null){ data = ""; } } @Keyword def setSearchData(TestObject obj) { if(data == null){ throw new RuntimeException("data未初始化,请先调用getFirstRecord方法"); } WebElement txtSearchBox = WebUiCommonHelper.findWebElement(obj, 20); txtSearchBox.sendKeys(data); }
内容的提问来源于stack exchange,提问作者enthusiasticCoder
相关产品推荐
相关产品推荐

