You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:48:19