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

如何验证行程时长计算正确性?Java+Selenide代码报错排查

问题排查与解决方案

核心问题分析

  1. 错误用LocalTime表示时间段:LocalTime是用来标记一天中的具体时刻(比如02:00、06:15),但行程时长是时间间隔,用LocalTime解析"4:15"属于概念错误——虽然短时长可能暂时解析成功,但逻辑完全不对,也无法处理跨天或超过24小时的时长。
  2. 未限定元素查找范围:全局选择器$(".wl-offer_duration")可能匹配页面中其他同类型元素,应该从当前卡片card内查找,避免取到错误的时长文本。
  3. Period使用逻辑混乱:Java 8的Period用于表示年月日周期,不适合处理时分级的时长间隔;代码里把LocalTime转成字符串再解析为Period的操作完全冗余,还容易引发格式错误。

修正后的代码

import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import com.codeborne.selenide.SelenideElement;

public void checkFlightDurationTime() {
    SelenideElement card = $$(".wl").get(0);
    
    // 解析出发、到达时间
    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
    LocalTime departure = LocalTime.parse(card.find(".wl-offer_edge-from").text(), timeFormatter);
    LocalTime arrival = LocalTime.parse(card.find(".wl-offer_edge-back").text(), timeFormatter);
    
    // 计算实际行程时长(支持跨天场景)
    Duration actualDuration = Duration.between(departure, arrival);
    if (arrival.isBefore(departure)) {
        actualDuration = actualDuration.plusHours(24);
    }
    
    // 解析页面显示的时长
    String durationText = card.find(".wl-offer_duration").text().replace("on the way ", "");
    String[] durationParts = durationText.split("h |m");
    long displayedHours = Long.parseLong(durationParts[0]);
    long displayedMinutes = Long.parseLong(durationParts[1]);
    Duration displayedDuration = Duration.ofHours(displayedHours).plusMinutes(displayedMinutes);
    
    // 验证时长一致性
    if (actualDuration.equals(displayedDuration)) {
        System.out.println("时长验证通过");
    } else {
        System.out.printf("时长验证失败:实际时长%dh %dm,页面显示%dh %dm%n",
                actualDuration.toHours(), actualDuration.toMinutesPart(),
                displayedHours, displayedMinutes);
    }
}

关键优化点

  • 用Duration专门处理时分级的时间间隔,符合语义且支持跨天计算。
  • 限定元素查找范围为当前卡片card,确保获取目标行程的时长。
  • 直接拆分页面时长文本为小时、分钟,避免复杂字符串替换引发的解析错误。
  • 新增跨天场景处理逻辑(若业务存在跨天行程)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:55:17