org.objectfabric.Selenium.java Source code

Java tutorial

Introduction

Here is the source code for org.objectfabric.Selenium.java

Source

/**
 * This file is part of ObjectFabric (http://objectfabric.org).
 *
 * ObjectFabric is licensed under the Apache License, Version 2.0, the terms
 * of which may be found at http://www.apache.org/licenses/LICENSE-2.0.html.
 * 
 * Copyright ObjectFabric Inc.
 * 
 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

package org.objectfabric;

import java.io.File;
import java.util.NoSuchElementException;
import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerList;
import org.mortbay.jetty.handler.ResourceHandler;
import org.mortbay.resource.ResourceCollection;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;

import com.google.common.base.Function;

// TODO: finish
public class Selenium {

    private static org.mortbay.jetty.Server _jetty;

    private static ChromeDriverService _service;

    private WebDriver _driver;

    @BeforeClass
    public static void startServices() throws Exception {
        ResourceCollection dirs = new ResourceCollection( //
                new String[] { "src/main/resources", "src/main/js", });
        ResourceHandler resources = new ResourceHandler();
        resources.setBaseResource(dirs);
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { resources, new DefaultHandler() });
        _jetty = new org.mortbay.jetty.Server(8080);
        _jetty.setHandler(handlers);
        _jetty.start();

        String home = System.getProperty("user.home");

        _service = new ChromeDriverService.Builder() //
                .usingAnyFreePort() //
                .usingDriverExecutable(new File(home + "/libs/chromedriver.exe")) //
                .build();

        _service.start();
    }

    @AfterClass
    public static void createAndStopService() throws Exception {
        _service.stop();
        _jetty.stop();
    }

    @Before
    public void createDriver() {
        _driver = new RemoteWebDriver(_service.getUrl(), DesiredCapabilities.chrome());
    }

    @After
    public void quitDriver() {
        _driver.quit();
    }

    @Test
    public void testHelloWorld() {
        _driver.get("http://www.google.com");
        Wait<WebDriver> wait = getWait();

        wait.until(new Function<WebDriver, Object>() {

            @Override
            public Object apply(WebDriver _) {
                WebElement text = _driver.findElement(By.name("text"));
                return "Hello World!".equals(text) ? this : null;
            }
        });

        // WebElement text = _driver.findElement(By.name("text"));

        // searchBox.sendKeys("webdriver");
        // searchBox.quit();
        // assertEquals("webdriver - Google Search", _driver.getTitle());
    }

    private Wait<WebDriver> getWait() {
        return new FluentWait<WebDriver>(_driver) //
                .withTimeout(5, TimeUnit.SECONDS) //
                .pollingEvery(1, TimeUnit.SECONDS) //
                .ignoring(NoSuchElementException.class);
    }

    private WebElement fluentWait(final By locator) {
        Wait<WebDriver> wait = new FluentWait<WebDriver>(_driver) //
                .withTimeout(5, TimeUnit.SECONDS) //
                .pollingEvery(100, TimeUnit.MILLISECONDS) //
                .ignoring(NoSuchElementException.class);

        WebElement foo = wait.until(new Function<WebDriver, WebElement>() {

            public WebElement apply(WebDriver driver) {
                return driver.findElement(locator);
            }
        });

        return foo;
    }
}