com.smash.revolance.ui.materials.mock.webdriver.driver.MockedWebDriver.java Source code

Java tutorial

Introduction

Here is the source code for com.smash.revolance.ui.materials.mock.webdriver.driver.MockedWebDriver.java

Source

package com.smash.revolance.ui.materials.mock.webdriver.driver;

/*
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Revolance-UI-Materials-Mock-Webdriver-Service
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Copyright (C) 2012 - 2013 RevoLance
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public 
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */

import com.smash.revolance.ui.materials.TemplateHelper;
import freemarker.template.TemplateException;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Platform;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.internal.Killable;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.DriverCommand;
import org.openqa.selenium.remote.ErrorCodes;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 * User: wsmash
 * Date: 28/09/13
 * Time: 11:49
 */
public class MockedWebDriver extends RemoteWebDriver implements TakesScreenshot, Killable {
    private int port;
    private MockedWebDriverServer service;
    private Map<String, Object> context = new HashMap<String, Object>();

    public MockedWebDriver(int port) throws MalformedURLException {
        super(new URL(String.format("http://localhost:%d/hub", port)),
                new DesiredCapabilities("MockedWebDriver", "", Platform.ANY));
    }

    /**
     * Method called before {@link #startSession(org.openqa.selenium.Capabilities) starting a new session}. The default
     * implementation is a no-op, but subtypes should override this method to define custom behavior.
     */
    @Override
    public void startClient() {
        try {
            service = new MockedWebDriverServer(Integer.parseInt(System.getProperty("webdriver.remote.server")));
            service.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Method called after executing a {@link #quit()} command. Subtypes
     */
    @Override
    public void stopClient() {
        try {
            service.stop();
        } catch (Exception e) {
            e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
        }
    }

    public void setElementClicked(boolean b) {
        context.put("elementClicked", "ok");
    }

    public void setElementId(String id) {
        context.put("elementIdAttribute", id);
    }

    public void setElementDisabled(boolean disabled) {
        context.put("elementDisabledAttribute", String.valueOf(disabled));
    }

    public void setElementClass(String clazz) {
        context.put("elementClassAttribute", clazz);
    }

    public void setElementHref(String href) {
        context.put("elementHrefAttribute", href);
    }

    public void setElementType(String type) {
        context.put("elementTypeAttribute", type);
    }

    public void setElementLocation(int x, int y) {
        context.put("elementX", String.valueOf(x));
        context.put("elementY", String.valueOf(y));
    }

    public void setElementSize(int w, int h) {
        context.put("elementWidth", String.valueOf(w));
        context.put("elementHeight", String.valueOf(h));
    }

    public void setElementText(String text) {
        context.put("elementText", text);
    }

    public void setElementTagName(String tagName) {
        context.put("elementTagName", tagName);
    }

    public void setSessionId(String id) {
        context.put("sessionId", id);
    }

    public void setUrl(String url) {
        context.put("currentUrl", url);
    }

    public void setAlertMessage(String msg) {
        context.put("alertMessage", msg);
    }

    public void setAlertStatusCode(ErrorCodes code) {
        context.put("alertStatusCode", String.valueOf(code));
    }

    private String buildJsonResponse(Map<String, Object> context, String method, String templatePath) {
        try {
            templatePath = templatePath + "/" + String.valueOf(method).toLowerCase();
            return TemplateHelper.processTemplate(templatePath + "/body.json", context);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        return "";
    }

    @Override
    public void kill() {

    }

    @Override
    public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
        // Get the screenshot as base64.
        String base64 = execute(DriverCommand.SCREENSHOT).getValue().toString();
        // ... and convert it.
        return target.convertFromBase64Png(base64);
    }
}