Skip to content

Commit

Permalink
Improved WebDriver configuration API
Browse files Browse the repository at this point in the history
  • Loading branch information
Mike Reiche committed Sep 3, 2021
1 parent f6a888b commit 703d00d
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,8 @@
import eu.tsystems.mms.tic.testframework.logging.Loggable;
import eu.tsystems.mms.tic.testframework.report.TestStatusController;
import eu.tsystems.mms.tic.testframework.report.model.context.ExecutionContext;
import eu.tsystems.mms.tic.testframework.report.model.context.MethodContext;
import eu.tsystems.mms.tic.testframework.report.model.context.SessionContext;
import eu.tsystems.mms.tic.testframework.report.model.context.Video;
import eu.tsystems.mms.tic.testframework.report.utils.ExecutionContextController;
import eu.tsystems.mms.tic.testframework.webdrivermanager.WebDriverSessionsManager;
import java.util.Optional;
import java.util.function.Consumer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.google.inject.AbstractModule;
import eu.tsystems.mms.tic.testerra.plugins.selenoid.collector.SelenoidEvidenceVideoCollector;
import eu.tsystems.mms.tic.testerra.plugins.selenoid.utils.SelenoidProperties;
import eu.tsystems.mms.tic.testerra.plugins.selenoid.webdriver.SelenoidCapabilityProvider;
import eu.tsystems.mms.tic.testerra.plugins.selenoid.webdriver.VideoDesktopWebDriverFactory;
import eu.tsystems.mms.tic.testframework.common.PropertyManager;
import eu.tsystems.mms.tic.testframework.common.Testerra;
Expand All @@ -47,9 +48,7 @@ public class SelenoidVideoHook extends AbstractModule implements
@Override
public void init() {

VideoDesktopWebDriverFactory videoDesktopWebDriverFactory = new VideoDesktopWebDriverFactory();

WEB_DRIVER_MANAGER.registerWebDriverRequestConfigurator(videoDesktopWebDriverFactory);
WEB_DRIVER_MANAGER.registerWebDriverRequestConfigurator(new SelenoidCapabilityProvider());

// VIDEO and VNC disabled by properties. Not doing anything here.
if (!VIDEO_ACTIVE && !VNC_ACTIVE) {
Expand All @@ -60,7 +59,7 @@ public void init() {
// Adding Video Handlers
if (VIDEO_ACTIVE) {

WEB_DRIVER_MANAGER.registerWebDriverAfterStartupHandler(videoDesktopWebDriverFactory);
WEB_DRIVER_MANAGER.registerWebDriverAfterStartupHandler(new VideoDesktopWebDriverFactory());

SelenoidEvidenceVideoCollector selenoidEvidenceVideoCollector = new SelenoidEvidenceVideoCollector();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@
import eu.tsystems.mms.tic.testerra.plugins.selenoid.utils.SelenoidProperties;
import eu.tsystems.mms.tic.testframework.common.PropertyManager;
import eu.tsystems.mms.tic.testframework.common.Testerra;
import eu.tsystems.mms.tic.testframework.logging.Loggable;
import eu.tsystems.mms.tic.testframework.report.utils.ExecutionContextController;
import eu.tsystems.mms.tic.testframework.report.utils.ExecutionContextUtils;
import eu.tsystems.mms.tic.testframework.utils.StringUtils;
import eu.tsystems.mms.tic.testframework.webdrivermanager.DesktopWebDriverRequest;
import eu.tsystems.mms.tic.testframework.webdrivermanager.WebDriverRequest;
import java.util.function.Consumer;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.remote.DesiredCapabilities;
Expand All @@ -42,32 +45,40 @@
*
* @author Eric Kubenka
*/
public class SelenoidCapabilityProvider {

private static final boolean VIDEO_ACTIVE = Testerra.Properties.SCREENCASTER_ACTIVE.asBool();
private static final boolean VNC_ACTIVE = PropertyManager.getBooleanProperty(SelenoidProperties.VNC_ENABLED, SelenoidProperties.Default.VNC_ENABLED);
public class SelenoidCapabilityProvider implements Consumer<WebDriverRequest>, Loggable {

private final boolean VIDEO_ACTIVE = Testerra.Properties.SCREENCASTER_ACTIVE.asBool();
private final boolean VNC_ACTIVE = PropertyManager.getBooleanProperty(SelenoidProperties.VNC_ENABLED, SelenoidProperties.Default.VNC_ENABLED);
private final String VNC_ADDRESS = PropertyManager.getProperty(SelenoidProperties.VNC_ADDRESS, SelenoidProperties.Default.VNC_ADDRESS);

@Override
public void accept(WebDriverRequest webDriverRequest) {
// Only accept webdrivers for desktop
if (!(webDriverRequest instanceof DesktopWebDriverRequest)) {
return;
}

if (VNC_ACTIVE && org.apache.commons.lang3.StringUtils.isBlank(VNC_ADDRESS)) {
log().warn(String.format("%s is set to true, but vnc host property %s was not set.", SelenoidProperties.VNC_ENABLED, SelenoidProperties.VNC_ADDRESS));
}

DesktopWebDriverRequest desktopWebDriverRequest = (DesktopWebDriverRequest)webDriverRequest;
// determine everything for selenoid... incl. video name on remote.
final Capabilities videoCaps = provide(desktopWebDriverRequest);
desktopWebDriverRequest.getDesiredCapabilities().merge(videoCaps);
}

public enum Caps {
videoName
}

private static final SelenoidCapabilityProvider INSTANCE = new SelenoidCapabilityProvider();

private SelenoidCapabilityProvider() {

}

public static SelenoidCapabilityProvider get() {
return INSTANCE;
}

/**
* Provide all capabilities for Selenoid configuration.
*
* @param request {@link eu.tsystems.mms.tic.testerra.plugins.selenoid.request.VideoRequest}
* @return Capabilities
*/
public Capabilities provide(DesktopWebDriverRequest request) {
private Capabilities provide(DesktopWebDriverRequest request) {

final String reportName = ExecutionContextController.getCurrentExecutionContext().runConfig.getReportName();
final String runConfigName = ExecutionContextController.getCurrentExecutionContext().runConfig.RUNCFG;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,10 @@
import eu.tsystems.mms.tic.testerra.plugins.selenoid.request.VideoRequest;
import eu.tsystems.mms.tic.testerra.plugins.selenoid.request.VideoRequestStorage;
import eu.tsystems.mms.tic.testerra.plugins.selenoid.utils.SelenoidHelper;
import eu.tsystems.mms.tic.testerra.plugins.selenoid.utils.SelenoidProperties;
import eu.tsystems.mms.tic.testframework.common.PropertyManager;
import eu.tsystems.mms.tic.testframework.logging.Loggable;
import eu.tsystems.mms.tic.testframework.report.model.context.SessionContext;
import eu.tsystems.mms.tic.testframework.testing.WebDriverManagerProvider;
import eu.tsystems.mms.tic.testframework.webdrivermanager.DesktopWebDriverRequest;
import eu.tsystems.mms.tic.testframework.webdrivermanager.WebDriverRequest;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import org.apache.commons.lang3.StringUtils;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;

/**
Expand All @@ -45,16 +38,9 @@
public class VideoDesktopWebDriverFactory implements
Loggable,
Consumer<WebDriver>,
BiConsumer<WebDriverRequest, SessionContext>,
WebDriverManagerProvider
{

private static final boolean VNC_ACTIVE = PropertyManager.getBooleanProperty(SelenoidProperties.VNC_ENABLED, SelenoidProperties.Default.VNC_ENABLED);
private static final String VNC_ADDRESS = PropertyManager.getProperty(SelenoidProperties.VNC_ADDRESS, SelenoidProperties.Default.VNC_ADDRESS);

private final SelenoidCapabilityProvider selenoidCapabilityProvider = SelenoidCapabilityProvider.get();
private final SelenoidHelper selenoidHelper = SelenoidHelper.get();

private final VideoRequestStorage videoRequestStorage = VideoRequestStorage.get();

// After startup
Expand All @@ -71,28 +57,10 @@ public void accept(WebDriver webDriver) {

// store it.
videoRequestStorage.store(videoRequest);
log().info("VNC Streaming URL: " + selenoidHelper.getRemoteVncUrl(videoRequest));
log().info("VNC Streaming URL: " + selenoidHelper.getRemoteVncUrl(videoRequest, remoteSessionId));
}
});
});
});
}

@Override
public void accept(WebDriverRequest webDriverRequest, SessionContext sessionContext) {

// Only accept webdrivers for desktop
if (!(webDriverRequest instanceof DesktopWebDriverRequest)) {
return;
}

if (VNC_ACTIVE && StringUtils.isBlank(VNC_ADDRESS)) {
log().warn(String.format("%s is set to true, but vnc host property %s was not set.", SelenoidProperties.VNC_ENABLED, SelenoidProperties.VNC_ADDRESS));
}

DesktopWebDriverRequest desktopWebDriverRequest = (DesktopWebDriverRequest)webDriverRequest;
// determine everything for selenoid... incl. video name on remote.
final Capabilities videoCaps = selenoidCapabilityProvider.provide(desktopWebDriverRequest);
desktopWebDriverRequest.getDesiredCapabilities().merge(videoCaps);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public void test_SetClipboard() {
SessionContext currentSessionContext = ExecutionContextController.getCurrentSessionContext();
SelenoidHelper.get().setClipboard(currentSessionContext, value);
GuiElement iframe = new GuiElement(driver, By.id("mce_0_ifr"));
GuiElement textArea = new GuiElement(driver, By.xpath("//body/p"), iframe);
GuiElement textArea = iframe.getSubElement(By.xpath("//body/p"));
textArea.sendKeys(Keys.CONTROL + "v");

textArea.asserts().assertTextContains(value);
Expand Down

0 comments on commit 703d00d

Please sign in to comment.