package org.fluentlenium.adapter; import org.fluentlenium.adapter.SharedMutator.EffectiveParameters; import org.openqa.selenium.WebDriver; import java.util.List; import java.util.function.Supplier; /** * FluentLenium Test Runner Adapter. * <p> * Extends this class to provide FluentLenium support to your Test class. */ public class FluentTestRunnerAdapter extends FluentAdapter { private final SharedMutator sharedMutator; /** * Creates a new test runner adapter. */ public FluentTestRunnerAdapter() { this(new DefaultFluentControlContainer()); } /** * Creates a test runner adapter, with a custom driver container. * * @param driverContainer driver container */ public FluentTestRunnerAdapter(FluentControlContainer driverContainer) { this(driverContainer, new DefaultSharedMutator()); } /** * Creates a test runner adapter, with a custom shared mutator. * * @param sharedMutator shared mutator. */ public FluentTestRunnerAdapter(SharedMutator sharedMutator) { this(new DefaultFluentControlContainer(), sharedMutator); } /** * Creates a test runner adapter, with a customer driver container and a customer shared mutator. * * @param driverContainer driver container * @param sharedMutator shared mutator */ public FluentTestRunnerAdapter(FluentControlContainer driverContainer, SharedMutator sharedMutator) { super(driverContainer); this.sharedMutator = sharedMutator; } /** * Invoked when a test method is starting. */ protected void starting() { starting(getClass()); } /** * Invoked when a test method is starting. * * @param testName Test name */ protected void starting(String testName) { starting(getClass(), testName); } /** * Invoked when a test method is starting. * * @param testClass Test class */ protected void starting(Class<?> testClass) { starting(testClass, testClass.getName()); } /** * Invoked when a test method is starting. * * @param testClass Test class * @param testName Test name */ protected void starting(Class<?> testClass, String testName) { EffectiveParameters<?> parameters = sharedMutator.getEffectiveParameters(testClass, testName, getDriverLifecycle()); SharedWebDriver sharedWebDriver = SharedWebDriverContainer.INSTANCE.getOrCreateDriver(new Supplier<WebDriver>() { @Override public WebDriver get() { return newWebDriver(); } }, parameters.getTestClass(), parameters.getTestName(), parameters.getDriverLifecycle()); initFluent(sharedWebDriver.getDriver()); } /** * Invoked when a test method has finished (whatever the success of failing status) */ protected void finished() { finished(getClass()); } /** * Invoked when a test method has finished (whatever the success of failing status) * * @param testName Test name */ protected void finished(String testName) { finished(getClass(), testName); } /** * Invoked when a test method has finished (whatever the success of failing status) * * @param testClass Test class */ protected void finished(Class<?> testClass) { finished(testClass, testClass.getName()); } /** * Invoked when a test method has finished (whatever the success of failing status) * * @param testClass Test class * @param testName Test name */ protected void finished(Class<?> testClass, String testName) { DriverLifecycle driverLifecycle = getDriverLifecycle(); if (driverLifecycle == DriverLifecycle.METHOD) { EffectiveParameters<?> parameters = sharedMutator.getEffectiveParameters(testClass, testName, driverLifecycle); SharedWebDriver sharedWebDriver = SharedWebDriverContainer.INSTANCE .getDriver(parameters.getTestClass(), parameters.getTestName(), parameters.getDriverLifecycle()); if (sharedWebDriver != null) { SharedWebDriverContainer.INSTANCE.quit(sharedWebDriver); } } else if (getDeleteCookies() != null && getDeleteCookies()) { EffectiveParameters<?> sharedParameters = sharedMutator.getEffectiveParameters(testClass, testName, driverLifecycle); SharedWebDriver sharedWebDriver = SharedWebDriverContainer.INSTANCE .getDriver(sharedParameters.getTestClass(), sharedParameters.getTestName(), sharedParameters.getDriverLifecycle()); if (sharedWebDriver != null) { sharedWebDriver.getDriver().manage().deleteAllCookies(); } } releaseFluent(); } /** * Invoked when a test class has finished (whatever the success of failing status) * * @param testClass test class to terminate */ public static void afterClass(Class<?> testClass) { List<SharedWebDriver> sharedWebDrivers = SharedWebDriverContainer.INSTANCE.getTestClassDrivers(testClass); for (SharedWebDriver sharedWebDriver : sharedWebDrivers) { SharedWebDriverContainer.INSTANCE.quit(sharedWebDriver); } } /** * Invoked when a test method has failed (before finished) */ protected void failed() { failed(getClass()); } /** * Invoked when a test method has failed (before finished) * * @param testName Test name */ protected void failed(String testName) { failed(getClass(), testName); } /** * Invoked when a test method has failed (before finished) * * @param testClass Test class */ protected void failed(Class<?> testClass) { failed(testClass, testClass.getName()); } /** * Invoked when a test method has failed (before finished) * * @param testClass Test class * @param testName Test name */ protected void failed(Class<?> testClass, String testName) { failed(null, testClass, testName); } /** * Invoked when a test method has failed (before finished) * * @param e Throwable thrown by the failing test. * @param testClass Test class * @param testName Test name */ protected void failed(Throwable e, Class<?> testClass, String testName) { if (isFluentControlAvailable()) { try { if (getScreenshotMode() == TriggerMode.AUTOMATIC_ON_FAIL && canTakeScreenShot()) { takeScreenShot(testClass.getSimpleName() + "_" + testName + ".png"); } } catch (Exception exception) { // NOPMD EmptyCatchBlock // Can't write screenshot, for some reason. } try { if (getHtmlDumpMode() == TriggerMode.AUTOMATIC_ON_FAIL && getDriver() != null) { takeHtmlDump(testClass.getSimpleName() + "_" + testName + ".html"); } } catch (Exception exception) { // NOPMD EmptyCatchBlock // Can't write htmldump, for some reason. } } } }