I am trying to create a JInvocation like :-
driver.manage().timeouts().implicitlyWait(10L, (TimeUnit.SECONDS));
This is the block of code that I use to generate the same :-
public static JInvocation implicitWait(JVar driverJVar, Long implicitWaitTime, TimeUnit timeUnit) {
JClass timeUnitType = (JClass) BasicUtility.getReferenceForClass(TimeUnit.class);
JExpression jExpression = JExpr.direct(timeUnitType.name().concat(".").concat(timeUnit.name()));
return driverJVar.invoke("manage").invoke("timeouts").invoke("implicitlyWait").arg(JExpr.lit(implicitWaitTime)).arg(jExpression);
}
This works perfectly, the only problem being that TimeUnit doesn't create an import statement for this. I have to put it manually. Is there any other way to use enums values and pass as arguments?
Found a solution to it. We can do it using the staticRef
method of JClass. This would bring the import statement automatically.
JClass timeUnitType = (JClass) CodeModelUtility.getReferenceForClass(TimeUnit.class);
return driverJVar.invoke("manage").invoke("timeouts").invoke("implicitlyWait").arg(JExpr.lit(implicitWaitTime)).arg(timeUnitType.staticRef(timeUnit.name()));