전에 잠깐 눈으로만 알고 있었는데, 한번 셈플링 해보았다.
자세한것은 모르지만 Selenium 과 WebDriver 의 장점을 살려서 Selenium 2 로 탄생했단다.
우선 편리한 레코딩을 위해서 Firefox와 Firefox Plugin으로 Selenium IDE를 설치한다.
http://docs.seleniumhq.org/download/
아래 IDE로 자동 레코딩된 소스를 조금 수정해서 돌려보았다.
Firefox 이외의 브라우저에서는 alert 클릭이 부분이 정상적으로 되지 않았다...
추 후에 연구해봐야 할듯...(단순하게 WebDriver만 바꾸는게 아닌건가...)
또한 IDE로 레코딩 할때에 frameset 기반의 홈페이지는 레코딩이 잘 되지 않았고, javascript로 레이어로 펼쳐서 클릭하는 메뉴의 경우에도 Firefox를 제외하고는 정상적으로 되지 않았다.
[LoginTest.java]
import static org.junit.Assert.fail; import java.io.File; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.htmlunit.HtmlUnitDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.remote.DesiredCapabilities; public class LoginTest { private WebDriver driver; private String baseUrl; private boolean acceptNextAlert = false; private StringBuffer verificationErrors = new StringBuffer(); private int browser = 1; @Test public void loginTest() throws Exception { baseUrl = "http://localhost:8080/"; driver.get(baseUrl + "/login"); driver.findElement(By.name("j_username")).clear(); driver.findElement(By.name("j_username")).sendKeys("1"); driver.findElement(By.name("j_password")).clear(); driver.findElement(By.name("j_password")).sendKeys("2"); driver.findElement(By.name("submit")).click(); driver.findElement(By.cssSelector("button")).click(); Assert.assertEquals("이구용", closeAlertAndGetItsText()); } @Before public void setUp() throws Exception { DesiredCapabilities caps = null; File f = null; if( browser == 0 ){ driver = new HtmlUnitDriver(true); }else if( browser == 1 ){ driver = new FirefoxDriver(); }else if( browser == 2 ){ f = new File("E:\\webdriver\\IEDriverServer32\\IEDriverServer.exe"); System.setProperty("webdriver.ie.driver", f.getAbsolutePath()); caps = DesiredCapabilities.internetExplorer(); caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); driver = new InternetExplorerDriver(caps); }else if( browser == 3 ){ f = new File("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"); System.setProperty("webdriver.chrome.driver", f.getAbsolutePath()); driver = new ChromeDriver(); } driver.manage().timeouts().implicitlyWait(300, TimeUnit.SECONDS); } @After public void tearDown() throws Exception { System.out.println("@After"); driver.quit(); String verificationErrorString = verificationErrors.toString(); if (!"".equals(verificationErrorString)) { fail(verificationErrorString); } } private String closeAlertAndGetItsText() { try { Alert alert = driver.switchTo().alert(); String alertText = alert.getText(); if (acceptNextAlert) { alert.accept(); } else { alert.dismiss(); } return alertText; } finally { acceptNextAlert = true; } } }
[build.gradle]
apply plugin: 'java' apply plugin: 'eclipse' sourceCompatibility = 1.5 version = '1.0' jar { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version } } repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' //testCompile 'org.seleniumhq.selenium:selenium-java:2.28.0' //testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:2.39.0' //testCompile 'org.seleniumhq.selenium:selenium-server:2.39.0' //testCompile 'org.seleniumhq.selenium:selenium-server-standalone:2.39.0' testCompile 'org.seleniumhq.selenium:selenium-java:2.39.0' testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:2.39.0' testCompile 'org.seleniumhq.selenium:selenium-chrome-driver:2.39.0' testCompile 'org.seleniumhq.selenium:selenium-IE-driver:2.39.0' testCompile 'org.seleniumhq.selenium:selenium-HtmlUnit-driver:2.39.0' }