webdriver - NextSteps
참조: 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()));
}