Selenium中List<String>匹配字符串数组时代码逻辑错误致输出异常
问题根因与修复方案
你的代码一共有4处问题,直接导致运行结果不符合预期:
- 标志位初始化位置错误:
ispresent变量只在方法最开始初始化了一次,没有在每遍历一个待校验目标值前重置为false。当第二个待查值"In Progress"匹配成功把ispresent设为true后,第三个待查值"Complete"的校验逻辑从一开始就带着错误的标志位状态,是漏输出Complete结果的核心原因。 - 不存在判断的位置完全错误:你把"值不存在"的判断写在了内层遍历列值的循环里,只要第一个列值和目标值不匹配,就会直接判定目标不存在、跳出内层循环,根本不会遍历后面的列值。这也是"Not Started"明明在列里存在却被误报不存在的原因——列的第一个值是"In Progress",匹配失败就直接触发了不存在的打印逻辑,根本没走到后面存着"Not Started"的行。
- 字符串匹配逻辑写反:你用
item.contains(all)做匹配,也就是判断「待查的目标字符串是否包含列里的文本」,正常逻辑应该是判断列里的文本是否匹配目标值,写反后很容易出现漏匹配、错匹配。 - 基础语法错误:代码里有多处无法通过编译的Java语法问题:泛型
List<string>应为大写开头的List<String>、system.out.println应为大写开头的System.out.println、两处if判断和打印语句缺少闭合右括号、外层循环遍历的数组名和方法参数名不一致(参数定义的是columntosearch,循环里写的是不存在的colitemstosearch)。
修复后可正常运行的代码
把逻辑调整为「单个待查值遍历完所有列后,再判断是否存在」,同时修正所有语法问题即可:
public void verifyItemsAreDisplayed(String columnname, String[] columntosearch) { List<String> colitems = getRowData(columnname); for (String targetItem : columntosearch) { // 每开始校验一个新的目标值,先把存在标志重置为false boolean isPresent = false; for (String colValue : colitems) { // 用列值匹配目标项,需要精确匹配的话把contains改成equals即可 if (colValue.contains(targetItem)) { isPresent = true; break; // 找到匹配项就不用继续遍历剩下的列了 } } // 所有列遍历完成后再统一输出结果 if (isPresent) { System.out.println(targetItem + " is displayed."); } else { System.out.println(targetItem + " is not displayed."); } } }
运行上述代码,就能得到你预期的输出结果,三个状态值都会被正确识别为存在。
内容的提问来源于stack exchange,提问作者Maou
相关产品推荐
相关产品推荐

