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

ArrayList断言比对抛出异常:打印格式不一致问题排查求助

问题分析与解决方案

咱们先把核心问题拆明白:你看到的“垂直/水平排列”只是打印时的展示形式,本质是两个列表的元素实际值或类型不匹配导致断言失败。下面一步步帮你排查解决:

第一步:先搞清楚两个列表的真实内容

别被打印排版误导,直接输出每个元素的原始内容和哈希值,精准定位差异:

// 打印网站拉取的列表详情
System.out.println("网站拉取的时间列表:");
for (Object item : webTimeList) {
    String content = item.toString().trim();
    System.out.printf("元素值:'%s',哈希码:%d%n", content, content.hashCode());
}

// 打印本地生成的列表详情
System.out.println("本地生成的时间列表:");
for (Object item : localTimeList) {
    String content = item.toString().trim();
    System.out.printf("元素值:'%s',哈希码:%d%n", content, content.hashCode());
}

通过这个你能快速发现问题:比如网站时间带了时区后缀("14:00 UTC" vs "14:00")、格式是12小时制("2:00 PM" vs "14:00"),或者存在隐藏空格。

第二步:检查时间生成逻辑的细节

你说按“当前时间2小时增量生成12个值”,这里有几个容易踩的坑:

  • 起始时间对齐:网站的时间是不是从当前整点/下一个2小时节点开始?比如现在是13:30,网站可能从14:00开始,而你从13:00生成,自然会错位。
  • 时区一致:网站返回的是服务器时区还是本地时区?比如你本地用UTC+8,网站返回UTC时间,那生成的时间会差8小时。
  • 循环次数正确:12个元素需要从0到22小时(每次加2),别多循环或少循环一次。

给你一个标准的时间生成示例(假设网站是24小时制字符串):

LocalDateTime start = LocalDateTime.now().truncatedTo(ChronoUnit.HOURS);
// 如果网站起始时间是下一个2小时节点,就改成start.plusHours(2 - start.getHour() % 2)
List<String> localTimeList = new ArrayList<>();
for (int i = 0; i < 12; i++) {
    LocalDateTime time = start.plusHours(i * 2);
    // 严格按照网站的时间格式格式化
    String formatted = time.format(DateTimeFormatter.ofPattern("HH:mm"));
    localTimeList.add(formatted);
}

第三步:最容易忽略的坑——列表元素类型不匹配

如果你的网站列表是直接从findElements获取的WebElement集合,那你存的是元素对象,不是时间文本!和本地生成的字符串列表比对肯定失败:

// 错误做法:直接存WebElement对象
List<WebElement> webElements = driver.findElements(By.cssSelector("your-time-selector"));
List<Object> webTimeList = new ArrayList<>(webElements);

// 正确做法:取出元素的文本值
List<String> webTimeList = new ArrayList<>();
for (WebElement elem : webElements) {
    webTimeList.add(elem.getText().trim());
}

第四步:用精准的断言方式定位问题

如果直接用Assert.assertEquals(list1, list2)失败,换成逐个元素比对,能直接看到哪个位置不匹配:

Assert.assertEquals(webTimeList.size(), localTimeList.size(), "两个列表长度不一样");
for (int i = 0; i < webTimeList.size(); i++) {
    String webVal = webTimeList.get(i).trim();
    String localVal = localTimeList.get(i).trim();
    Assert.assertEquals(webVal, localVal, String.format("第%d个元素不匹配:网站值='%s',本地值='%s'", i, webVal, localVal));
}

内容的提问来源于stack exchange,提问作者Mo Samuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:14:54