package net.serenitybdd.screenplayx.actions;
import net.serenitybdd.core.steps.Instrumented;
import net.serenitybdd.screenplay.Action;
import net.serenitybdd.screenplay.Actor;
import net.serenitybdd.screenplay.abilities.BrowseTheWeb;
import org.openqa.selenium.JavascriptExecutor;
// the original implementation has a side-effect of injecting the jQuery library, which conflicts with Jenkins' prototype.js
public class Evaluate implements Action {
private final String expression;
private Object[] parameters;
public Evaluate(String expression) {
this.expression = expression;
}
public Evaluate withParameters(Object... parameters) {
this.parameters = parameters;
return this;
}
public <T extends Actor> void performAs(T theUser) {
((JavascriptExecutor) BrowseTheWeb.as(theUser).getDriver()).executeScript(expression, parameters);
}
public static Evaluate javascript(String expression, Object... parameters) {
Evaluate evaluate = Instrumented.instanceOf(Evaluate.class).withProperties(expression);
return evaluate.withParameters(parameters);
}
}