Does Java have anything similar to C#'s Action type? Is Java 8 or Pre-Java 8 the way to go? Why or why not? I'm trying to avoid going down any rabbit holes. Please help me understand my options...
Statement:
Driver.NoWait(() => links = rowFindElements(ByLinkText(title)));
Methods:
public static void NoWait(Action action)
{
TurnOffWait();
action();
TurnOnWait();
}
public static void TurnOnWait()
{
Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
}
public static void TurnOffWait()
{
Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(0));
}
UPDATE
Thanks to @Nick Y and a programmer at the office (who told me the history of Java pragmatics vs Java traditionalists). This is the outcome of my findings:
Feature Menu Class 1st Way Post Java 8
public class FeatureMenu
{
static WebElement sideTab;
public static void Expand()
{
try
{
Iframe.Default.SwitchTo();
Driver.NoWait(() -> sideTab = Driver.Instance.findElement(By.cssSelector("div.wijmo-wijsplitter-v-panel1-collapsed")));
sideTab.click();
Log.Info("Feature Menu Expanded.");
}
catch(Exception e)
{
Log.Error("[EXCEPTION CAUGHT] : FeatureMenu.Expand()");
throw(e);
}
}
}
Feature Menu 2nd Way Pre Java 8
public class FeatureMenu
{
static WebElement sideTab;
public static void Expand()
{
try
{
Iframe.Default.SwitchTo();
Driver.NoWait( new Driver.Action(){ public void apply(){
sideTab = Driver.Instance.findElement(By.cssSelector("div.wijmo-wijsplitter-v-panel1-collapsed"));
}
});
sideTab.click();
Log.Info("Feature Menu Expanded.");
}
catch(Exception e)
{
Log.Error("[EXCEPTION CAUGHT] : FeatureMenu.Expand()");
throw(e);
}
}
}
Driver Class that can be used with either approach
public class Driver
{
public static WebDriver Instance;
public static String BaseAddress(String baseAddress)
{
return baseAddress;
}
public static void Initialize(String driverType)
{
Instance = new FirefoxDriver();
Instance.manage().window().maximize();
TurnOnWait();
}
@FunctionalInterface
public interface Action {
void apply();
}
public static void NoWait(Action action)
{
TurnOffWait();
action.apply();
TurnOnWait();
}
public static void TurnOffWait()
{
Instance.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}
public static void TurnOnWait()
{
Instance.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
}