关于调用具有javascript函数的方法的转换问题

时间:2018-05-14 13:15:36

标签: java selenium selenium-webdriver

当我从另一个包含javascript函数的类调用该方法时,我的测试类失败了。

施法中的问题。来自单独类的java脚本方法如下所示

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;

}

在测试类中,调用方法" javatimeout"在方法登录中。

`public class TC01login {

WebDriver driver;
WebDriverWait wait;

Commonclass obj1 = new Commonclass();

public void login()
{
    driver.get("https://staging.agshealth.com/NexGenQMS/#/upload");

    long timetaken = obj1.javatimeout(driver);
    System.out.println(timetaken);
}`

失败:登录 java.lang.ClassCastException:java.base / java.lang.Double无法强制转换为java.base / java.lang.Long

2 个答案:

答案 0 :(得分:1)

您对<a class="click" href="#">Click Me</a><br> <a class="focus" href="#">Focus me[use Tab]</a>的演员表示错误。

根据文档,当从javascript代码返回十进制值时,(long)会返回一个Double:

https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html

从Javascript代码返回非十进制值时返回long。

答案 1 :(得分:1)

您的问题似乎是executeScript方法返回java.lang.Double值...您无法将java.lang.Double对象强制转换为java.lang.Long对象!试试这样:

long loadTime = js.executeScript(...).longValue();

或者确保JS返回一个整数而不是一个double值! 有关更多信息,请参阅JavascriptExecutor#executeScript。 更安全的方式是这样的:

long loadTime;
Object returnObject = js.executeScript(...);

if(returnObject instanceof Number)
{
    loadTime = ((Number) returnObject).longValue();
}