org.musetest.selenium.mocks.MuseMockDriver.java Source code

Java tutorial

Introduction

Here is the source code for org.musetest.selenium.mocks.MuseMockDriver.java

Source

package org.musetest.selenium.mocks;

import org.openqa.selenium.*;
import org.openqa.selenium.logging.*;
import org.slf4j.*;
import org.slf4j.Logger;

import java.lang.reflect.*;
import java.net.*;
import java.util.*;
import java.util.logging.*;

/**
 * @author Christopher L Merrill (see LICENSE.txt for license details)
 */
public class MuseMockDriver implements WebDriver, TakesScreenshot {
    @Override
    public void get(String url) {
        _current_url = url;
        _title = "MuseMock - " + url + " title";
    }

    @Override
    public String getCurrentUrl() {
        return _current_url;
    }

    @Override
    public String getTitle() {
        return _title;
    }

    @Override
    public List<WebElement> findElements(By by) {
        return null;
    }

    @Override
    public WebElement findElement(By by) {
        if (by instanceof By.ByXPath)
            return _xpath_elements.get(extractPrivateMember("xpathExpression", by));
        else if (by instanceof By.ById)
            return _id_elements.get(extractPrivateMember("id", by));
        return null;
    }

    @Override
    public String getPageSource() {
        return new String(_html);
    }

    @Override
    public void close() {

    }

    @Override
    public void quit() {
        _is_quitted = true;
    }

    @Override
    public Set<String> getWindowHandles() {
        return null;
    }

    @Override
    public String getWindowHandle() {
        return null;
    }

    @Override
    public TargetLocator switchTo() {
        return new TargetLocator() {
            @Override
            public WebDriver frame(int index) {
                return null;
            }

            @Override
            public WebDriver frame(String nameOrId) {
                return null;
            }

            @Override
            public WebDriver frame(WebElement frameElement) {
                _target = frameElement;
                return MuseMockDriver.this;
            }

            @Override
            public WebDriver parentFrame() {
                return null;
            }

            @Override
            public WebDriver window(String nameOrHandle) {
                return null;
            }

            @Override
            public WebDriver defaultContent() {
                return null;
            }

            @Override
            public WebElement activeElement() {
                return null;
            }

            @Override
            public Alert alert() {
                return null;
            }
        };
    }

    @Override
    public Navigation navigate() {
        return new Navigation() {
            @Override
            public void back() {

            }

            @Override
            public void forward() {

            }

            @Override
            public void to(String url) {
                get(url);
            }

            @Override
            public void to(URL url) {
                get(url.toString());
            }

            @Override
            public void refresh() {

            }
        };
    }

    @Override
    public Options manage() {
        return new Options() {
            @Override
            public void addCookie(Cookie cookie) {

            }

            @Override
            public void deleteCookieNamed(String name) {

            }

            @Override
            public void deleteCookie(Cookie cookie) {

            }

            @Override
            public void deleteAllCookies() {

            }

            @Override
            public Set<Cookie> getCookies() {
                return null;
            }

            @Override
            public Cookie getCookieNamed(String name) {
                return null;
            }

            @Override
            public Timeouts timeouts() {
                return null;
            }

            @Override
            public ImeHandler ime() {
                return null;
            }

            @Override
            public Window window() {
                return null;
            }

            @Override
            public Logs logs() {
                return new Logs() {
                    @Override
                    public LogEntries get(String logType) {
                        LogEntry entry = new LogEntry(Level.ALL, System.currentTimeMillis(), new String(_log));
                        return new LogEntries(Collections.singleton(entry));
                    }

                    @Override
                    public Set<String> getAvailableLogTypes() {
                        return Collections.singleton("only-one");
                    }
                };
            }
        };
    }

    public void addXpathElement(String xpath, WebElement element) {
        _xpath_elements.put(xpath, element);
    }

    public void addIdElement(String id, WebElement element) {
        _id_elements.put(id, element);
    }

    public Object getTarget() {
        return _target;
    }

    private String extractPrivateMember(String name, Object target) {
        try {
            Class the_class = target.getClass();
            for (Field field : the_class.getDeclaredFields())
                if (name.equals(field.getName())) {
                    field.setAccessible(true);
                    return field.get(target).toString();
                }
            return null;
        } catch (IllegalAccessException e) {
            LOG.error("Unable to access private member of the By object.");
            return null;
        }
    }

    public void putScreenshot(byte[] bytes) {
        _screenshot = bytes;
    }

    public void putHtml(byte[] bytes) {
        _html = bytes;
    }

    public void putLog(byte[] bytes) {
        _log = bytes;
    }

    @Override
    public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
        if (target.equals(OutputType.BYTES))
            return (X) _screenshot;
        return null;
    }

    public boolean _is_quitted = false;
    private String _current_url = null;
    private String _title = null;
    private Object _target = null;

    private Map<String, WebElement> _xpath_elements = new HashMap<>();
    private Map<String, WebElement> _id_elements = new HashMap<>();

    private byte[] _screenshot;
    private byte[] _html;
    private byte[] _log = "".getBytes();

    private final static Logger LOG = LoggerFactory.getLogger(MuseMockDriver.class);
}