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

调用含JavaScript函数的方法时出现ClassCastException类型转换异常

解决Java调用JavaScript返回值时的ClassCastException问题

这个java.lang.ClassCastException: java.base/java.lang.Double cannot be cast to java.base/java.lang.Long错误的原因很明确:你在Java代码里把JavaScript返回的Double类型值直接强制转换成了Long类型,而Java不允许这种直接的跨类型强转。

问题根源拆解

看你Commonclass里的javatimeout方法代码:

public long javatimeout(WebDriver driver) { 
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    long loadTime = (long) js.executeScript( 
        "return (window.performance.timing.loadEventEnd - window.performance.timing.navigationStart) / 1000"); 
    System.out.println("Screen Loading time is " +loadTime); 
    return loadTime; 
} 

JavaScript里的所有数字都是64位浮点数(对应Java的Double类型),哪怕你的除法运算结果是整数,返回的依然是Double(比如1000/1000在JS里是1.0而非1)。直接用(long)强转这个Double对象,就会触发类型转换异常。

两种可行的解决方案

方案1:Java端先转Double再转Long

先把executeScript的返回值转换成Double,再通过longValue()方法转成Long:

public long javatimeout(WebDriver driver) {
    JavascriptExecutor js = (JavascriptExecutor) driver;
    // 先获取Double类型的返回结果
    Double loadTimeDouble = (Double) js.executeScript(
        "return (window.performance.timing.loadEventEnd - window.performance.timing.navigationStart) / 1000");
    // 转换为Long,默认截断小数部分;如果需要四舍五入可以用Math.round(loadTimeDouble)
    long loadTime = loadTimeDouble.longValue();
    System.out.println("Screen Loading time is " + loadTime);
    return loadTime;
}

方案2:让JavaScript返回整数

直接在JS代码里用Math.floor()(向下取整)或Math.round()(四舍五入)把结果转成整数,这样Java端就能直接强转成Long了:

public long javatimeout(WebDriver driver) {
    JavascriptExecutor js = (JavascriptExecutor) driver;
    // 在JS层面先把结果转为整数
    long loadTime = (long) js.executeScript(
        "return Math.floor((window.performance.timing.loadEventEnd - window.performance.timing.navigationStart) / 1000)");
    System.out.println("Screen Loading time is " + loadTime);
    return loadTime;
}

两种方案都能解决你的问题,你可以根据需求选择:如果需要保留小数后再处理选方案1,如果只需要整数加载时间选方案2更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:22