참조: http://code.google.com/p/webdriver/wiki/NextSteps

어떤 웹 드라이버 구현체를 사용해야 하는가?

HtmlUnitDriver: 모든 OS 지원
FirefoxDriver: 모든 OS 지원
InternetExplorerDriver: 윈도우만 지원
SafariDriver: 맥 OS X만 지원

빠르게 테스트하고 싶다면, HtmlUnitDriver가 제격이지만, 실제 브라우저를 통해서 어떤 일이 벌어지는지 보고 싶다면, 각 브라우저에 대한하는 드라이버를 이용. 대신 속도는 떨어질 수 있다.

WebDriver 인터페이스를 사용하여 각각의 구현체를 교체해가며 테스트 할 수 있다.

WebDriver driver = new HtmlUnitDriver();

네비게이션

페이지 이동을 테스트 할 때는 get()을 사용한다.

driver.get("http://www.google.com");

또는 driver.navigate().to("http://www.google.com"); 이런 식으로 이동할 수도 있다.

페이지 다루기

<input type="text" name="passwd" id="passwd-id" />

이 엘리먼트를 참조하는 객체를 만들려면 아래와 같이 사용할 수 있다.

WebElement element;
element = driver.findElement(By.id("passwd-id"));
element = driver.findElement(By.name("passwd"));
element = driver.findElement(By.xpath("//input[@id='passwd-oid']"));

XpathInWebDriver를 사용할 때, 쿼리에 해당하는 엘리먼트가 여러개 라면 그 중에서 가장 첫 번째 엘리먼트를 참조하게 되고, 해당하는 엘리먼트가 없다면, NoSuchElementException이 발생한다.

값을 입력할 수도 있다.

element.sendKeys("some text");

방향키를 누른 효과를 낼 수 도 있다.

element.sendKeys(" and some", Keys.ARROW_DOWN);

텍스트 필드에 입력한 값은 자동으로 지워지지 않기 때문에 원하는 곳에서 clear()로 지워야 한다

element.clear();

폼 채우기

WebElement select = driver.findElement(By.xpath("//select"));
List<WebElement> allOptions = select.getChildrenOfType("option");
for (WebElement option : allOptions) {
    System.out.println(String.format("Value is: %s", option.getValue()));
    option.setSelected();
}

위 코드는 화면에서 SELECT 엘리먼트를 찾고 그 안에 있는 OPTION을 순회하면서 화면에 값을 출력하고 모두 체크한다.

폼을 서브밋 할 수도 있다.

driver.findElement(By.id("submit")).click();  // Assume the button has the ID "submit" :)

또는 모든 엘리먼트에 있는 submit() 메서드를 이용할 수도 있다.

element.submit();

비주얼 정보와 드래그 앤 드랍

화면에 보여줄 엘리먼트인지 감추는 엘리먼트인지는 캐스팅을 통해 알 수 있다

WebElement plain = driver.findElement(By.name("q"));
RenderedWebElement element = (RenderedWebElement) element;

만약 화면에 보여주는 엘리먼트라면 그 위치와 크기 정보를 알 수 있으며 드래그 앤 드랍도 할 수 있다.

RenderedWebElement element = (RenderedWebElement) driver.findElement(By.name("source"));
RenderedWebElement target = (RenderedWebElement) driver.findElement(By.name("target"));

element.dragAndDropOn(target);

윈도우와 프레임 이동하기

화면을 전환할 수 있다.

driver.switchTo().window("windowName");

프레임을 이동할 수도 있다.

driver.switchTo().frame("frameName");

닷(.)을 이용해서 서브 프레임으로 이동할 수도 있다.

driver.switchTo().frame("frameName.0.child");

네비게이션: 히스토리와 위치

처음에 살펴본 get()을 사용할 수도 있지만, navigate()를 이용해서 이동할 수도 있다.

driver.navigate().to("http://www.example.com");

navigate를 사용하면, forward()와 back()을 이용하여 히스토리 정보를 이용할 수 있다.

driver.navigate().forward();
driver.navigate().back();

쿠키

// Go to the correct domain
driver.get("http://www.example.com");

// Now set the cookie. This one's valid for the entire domain
Cookie cookie = new Cookie("key", "value");
driver.manage().addCookie(cookie);

// And now output all the available cookies for the current URL
Set<Cookie> allCookies = driver.manage().getCookies();
for (Cookie loadedCookie : allCookies) {
    System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));
}