Selenium WebDriver 와 TestNG 를 같이 사용하는 방법을 정리하겠습니다. 그리고 xml을 이용해서 parallel 하게 같은 테스트를 여러 브라우저에서 같이 테스트 하는 방법도 알아보구요.
우선 실제 Test를 하는 클래스부터 봅니다.
public class WebDriverTest extends SelTestCase {
@Test
public void testWiki() {
driver.get("http://www.wikipedia.org/");
driver.findElement(By.id("searchInput")).sendKeys("Selenium Software");
driver.findElement(By.name("go")).click();
driver.findElement(By.cssSelector(".mw-search-results li:nth-of-type(1) a")).click();
Assert.assertTrue(
driver.findElement(
By.cssSelector("img[src='//upload.wikimedia.org/wikipedia/en/5/5c/Seleniumlogo.png']")).
isDisplayed());
Reporter.log("My test Passed");
}
}
이 WebDriverTest는 SelTestCase를 extends 했습니다. 이 SelTestCase는 나중에 보고 이 소스부터 분석하겠습니다.
@Test 는 annotation 인데요. jUnit 이랑 똑같습니다. 그런데 여기서는 TestNG를 사용할 거니까 TestNG를 import 해야 합니다.
import org.testng.annotations.Test;
다음은 testWiki()라는 테스트 메소드를 만듭니다.
여기서는 wikipedia.org 페이지를 열고 id 가 searchInput 인 element를 찾아서 거기에 Selenium Software 를 입력합니다. 아마 이 element는 textfield나 textarea 일 겁니다.
그 다음엔 name 이 go 인 엘리먼트를 click 합니다.
그 다음엔 cssSelector를 사용하는데요. class 가 mw-search-results 인것을 찾고 그 안에 li 인 것 중에 가장 첫번째 li에 있는 a 링크를 찾아서 그 링크를 클릭합니다.
그 다음에 테스트 문이 들어가는데요. 링크를 클릭해서 나온 페이지에 해당 이미지가 있으면 테스트가 Success 될 것이고 이 이미지가 없으면 fail 될 겁니다.
그 다음에는 TestNG에서 자동으로 생성해 주는 Report 에 log가 찍히도록 해 줍니다.
그런데 여기서 driver라는 객체가 있는데 이 객체를 선언해 주는 부분이 없습니다.
이 driver 객체는 상속받은 SelTestCase 클래스에서 선언해 주었을 겁니다.
public class SelTestCase {
WebDriver driver;
@BeforeMethod()
@Parameters("browser")
public void launchBrowser(String browser) {
String path = System.getProperty("user.dir"); // current path of project
if(browser.equalsIgnoreCase("FF")){
driver = new FirefoxDriver();
}else if(browser.equalsIgnoreCase("Chrome")){
System.setProperty("webdriver.chrome.driver",path + "\\chromedrive\\chromedriver.exe");
driver = new ChromeDriver();
}else if (browser.equalsIgnoreCase("IE")) {
System.setProperty("webdriver.ie.driver",path + "\\iedrive\\IEDriverServer.exe");
driver = new InternetExplorerDriver();
}
}
@AfterMethod
public void closeBrowser() {
driver.close();
driver.quit();
}
}
이 SelTestCase 클래스에서는 맨 먼저 WebDriver 를 초기화 시킵니다. 여기서 초기화
그 다음에 @BeforeMethod() annotation이 있는데요. 이것은 테스트 메소드가 실행되기 전에 실행하라는 의미 입니다.
그러니까 WebDriverTest 클래스에 있는 testWiki() 라는 테스트 메소드가 시작되기 전에 이 메소드가 시작 됩니다.
그 다음에 있는 annotation은 파라미터로서 browser를 받겠다는 건데요. 이 파라미터는 다음에 볼 xml 파일에서 던져 줄 겁니다.
해당 메소드를 보면은요. launchBrowser() 라는 메소드인데요 스트링을 input 파라미터로 받습니다.
그 안을 보면 path라는 스트링에 이 프로젝트의 현재 위치를 대입합니다.
그리고 if 문이 나오는데요. input 파라미터가 FF 이면 FirefoxDriver() 를 driver 객체에 대입하고 Chrome인 경우는 ChromeDriver()를 그리고 IE인 경우에는 인터넷 익스플로러 드라이버를 drive 객체에 대입합니다.
그러니까 저 위에 있는 WebDriverTest 클래스의 testWiki() 테스트 메소드가 시작되기 전에 조건에 맞게 driver 객체를 세팅한 후 그 테스트 메소드가 실행될 겁니다.
다음에 나오는 건 @AfterMethod 가 있는 걸로 봐서 저 testWiki() 테스트 메소드가 실행되고 난 다음에 실행되는 메소드 입니다.
이름이 closeBrower() 이고 그 안에는 브라우저를 close하고 메모리로부터 driver 객체를 완전히 없애는 quit을 해주는 메소드 입니다.
이 두 클래스에서는 TestNG와 Selenium WebDriver를 같이 사용하고 있습니다.
여기에서 이 한개의 테스트를 여러 웹 브라우저에서 테스트할 수 있도록 하는 작업을 하겠습니다.
그러면 해당 프로젝트에 xml 파일을 만들어야 합니다.
testng.xml 이라는 파일을 아래와 같이 만듭니다.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Widipedia Test" verbose="3" parallel="methods">
<test name="Wiki in FF">
<parameter name="browser" value="FF"></parameter>
<classes>
<class name="WebDriverTest"/>
</classes>
</test>
<test name="Wiki in Chrome">
<parameter name="browser" value="Chrome"></parameter>
<classes>
<class name="WebDriverTest"/>
</classes>
</test>
<!--
<test name="Wiki in IE">
<parameter name="browser" value="IE"></parameter>
<classes>
<class name="WebDriverTest"/>
</classes>
</test>
-->
</suite>
<suite> 태그를 써서 여러 테스트를 한개의 suite에 담겠다는 것을 알립니다.
그리고 <test> 태그 안에 각각의 테스트들을 정의 합니다.
첫번째는 <parameter> 태그안에 name 이 browser이고 value 는 FF 를 설정합니다.
이 것이 SelTestCase 클래스에 있는 launchBrowser()메소드에 전달될 파라미터 입니다.
그 다음에 <classes> 태그 안에는 name 에 WebDriverTest 를 넣습니다.
이 클래스를 run 하라는 겁니다.
그 다음에는 Chrome 과 IE 에 대한 <test> 태그들을 같은 방식으로 만듭니다.
여기서 IE는 주석처리를 했습니다.
제가 해 보니까 에러가 나더라구요.
혹시 이 IE는 왜 에러가 나는지 아시는 분은 좀 알려 주세요.
이 test suite를 실행하려면 Run-run configurations 를 선택합니다.
여기서 보시다시피 프로젝트를 선택하고 Suite를 선택한 다음에 아까 만들었던 xml 을 세팅합니다.
그러면 이 xml에서 정의된 대로 테스트가 여러 브라우저에서 실행될 겁니다.
'TDD Project > Selenium Web Driver' 카테고리의 다른 글
Page Objects in Selenium 2 (Web Driver) (0) | 2013.10.24 |
---|---|
Selenium 2/WebDriver Quick Tips: Page Object Navigation Strategies (0) | 2013.10.21 |
Selenium WebDriver - PageFactory (0) | 2013.10.20 |
Selenium WebDriver - PageObjects (0) | 2013.10.20 |
Selenium WebDriver Tutorial 03 (0) | 2013.10.19 |
Selenium WebDriver Tutorial 02 (0) | 2013.10.18 |
Selenium WebDriver Tutorial 01 (0) | 2013.10.17 |
Selenium WebDriver - WebElement 다루기 (0) | 2013.10.16 |
Selenium WebDriver - Maven 관련 (0) | 2013.10.15 |
Selenium WebDriver 관련 메모 - 설치 및 브라우저별 WebDriver 세팅 하기 (0) | 2013.10.15 |