All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.liveperson.ephemerals.SeleniumEphemeral Maven / Gradle / Ivy

package com.liveperson.ephemerals;

import com.liveperson.ephemerals.deploy.*;
import com.liveperson.ephemerals.deploy.probe.HttpProbe;
import com.liveperson.ephemerals.deploy.unit.DeploymentUnit;
import com.liveperson.ephemerals.deploy.unit.DockerDeploymentUnit;
import org.openqa.selenium.remote.BrowserType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.MalformedURLException;
import java.net.URL;

/**
 *
 * Created by waseemh on 9/4/16.
 */
public final class SeleniumEphemeral extends DeployableEphemeral {

    /**
     * Selenium related constant values
     */
    private final static int SELENIUM_PORT = 4444;
    private final static String SERVER_PATH = "/wd/hub";
    private static final String CHROME_IMAGE = "selenium/standalone-chrome-debug:2.53.0";
    private static final String FIREFOX_IMAGE = "selenium/standalone-firefox-debug:2.53.0";

    private final DesiredCapabilities desiredCapabilities;

    private final static Logger logger = LoggerFactory.getLogger(SeleniumEphemeral.class);

    private SeleniumEphemeral(Builder builder) {
        super(builder);
        this.desiredCapabilities = builder.desiredCapabilities;
    }

    @Override
    protected RemoteWebDriver createObject(DeploymentEndpoints endpoints) {

        URL remoteWebDriverUrl = null;
        for(DeploymentEndpoints.Endpoint endpoint : endpoints.list()) {
            if(endpoint.getName().equals("selenium-server")) {
                String host = endpoint.getHost();
                int port = endpoint.getPort();
                try {
                    remoteWebDriverUrl = new URL(String.format("http://%s:%s/%s", host, port, SERVER_PATH));
                    logger.info("RemoteWebDriver URL {}",remoteWebDriverUrl);
                } catch (MalformedURLException e) {
                    return null;
                }
            }
        }

        return new RemoteWebDriver(remoteWebDriverUrl,desiredCapabilities);
    }

    @Override
    protected DeploymentUnit createDeploymentUnit() {

        String browserName = desiredCapabilities.getBrowserName();
        logger.info("Selenium browser: {}",browserName);

        String image;
        switch (browserName) {
            case BrowserType.CHROME:
                image = CHROME_IMAGE;
                break;
            case BrowserType.FIREFOX:
                image = FIREFOX_IMAGE;
                break;
            default:
                throw new UnsupportedOperationException("Provided browser type '" + browserName + "' is not supported");
        }

        return new DockerDeploymentUnit.Builder("selenium",image)
                .withCpu(1)
                .withMem(1024)
                .withHealthProbe(new HttpProbe.Builder()
                        .withPath(SERVER_PATH)
                        .withPort(SELENIUM_PORT)
                        .build())
                .withPort(new DeploymentPort.Builder("selenium-server",SELENIUM_PORT)
                        .build())
                .build();
    }

    public static class Builder extends DeployableEphemeral.Builder {

        private DesiredCapabilities desiredCapabilities = DesiredCapabilities.firefox();

        public Builder (DeploymentContext deploymentContext) {
            super(deploymentContext);
        }

        public Builder withDesiredCapabilities(DesiredCapabilities desiredCapabilities) {
            this.desiredCapabilities = desiredCapabilities;
            return this;
        }

        public SeleniumEphemeral build() {
            return new SeleniumEphemeral(this);
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy