当我从另一个包含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
答案 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();
}