/**
* 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;
}
}