๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SQA/Automation

Selenium ์ฟ ํ‚ค ํ•ธ๋“ค๋ง, cookie ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ์ž๋™ํ™” java

ํ•ด๋‹น ํฌ์ŠคํŠธ๋Š” java ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค. ์˜ค๋Š˜์€ ์›น ๋“œ๋ผ์ด๋ฒ„์˜ ๊ธฐ๋Šฅ ์ค‘์— ์ฟ ํ‚ค๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.

 

์ฟ ํ‚คํ•ธ๋“ค๋ง๋ฐฉ๋ฒ•
์ฟ ํ‚ค ํ•ธ๋“ค๋ง ๋ฐฉ๋ฒ•

 

์ฟ ํ‚ค ๋‹ค๋ฃจ๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž.

๋กœ๊ทธ์ธํ•ด์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ง„์ž…, ๋กœ๊ทธ์ธํ•ด์„œ ์ตœ๊ทผ ๊ตฌ๋งค ๋ชฉ๋ก ์ง„์ž…, ๋กœ๊ทธ์ธํ•ด์„œ....

 

๋งค๋ฒˆ ์‹œ๋‚˜๋ฆฌ์˜ค๋งˆ๋‹ค ๋กœ๊ทธ์ธ์„ ๋”ฐ๋กœ ํ•œ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ๊ฐ„์€ ๊ทธ๋งŒํผ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๋‹ค. ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ธฐ ์œ„ํ•ด, ์ตœ์ดˆ ๋กœ๊ทธ์ธํ•  ๋•Œ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ํŒŒ์ผ์— ๋ณด๊ด€ํ•œ ํ›„, ๋‹ค์Œ๋ฒˆ ๋กœ๊ทธ์ธ์—๋Š” ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€ ๋“œ๋ผ์ด๋ฒ„์— ์ถ”๊ฐ€ํ•˜๋Š” ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฟ ํ‚ค ์ €์žฅํ•˜๊ธฐ

์›น ๋“œ๋ผ์ด๋ฒ„๋Š” ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋กœ ํ˜„์žฌ ๋กœ๋“œํ•œ ์›น ํŽ˜์ด์ง€์˜ ๋ชจ๋“  ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

driver.manage().getCookies()

์ฟ ํ‚ค๋Š” ์ด๋ฆ„, ๊ฐ’, ๋„๋ฉ”์ธ, ๊ฒฝ๋กœ, ๋งŒ๋ฃŒ์ผ, ์•”ํ˜ธํ™” ๊ด€๋ จ ์ •๋ณด๋ฅผ ๊ฐ€์ง„๋‹ค. ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ , TC ์‹คํ–‰ ์‹œ ํŒŒ์ผ์„ ์ฝ์–ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋“œ๋ผ์ด๋ฒ„์— ์ „๋‹ฌํ•ด ๋ณด์ž. ๋„ค์ด๋ฒ„ ์„œ๋น„์Šค๋กœ ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜๋‹ค.

 

๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ browser.data ํŒŒ์ผ์— ์ €์žฅํ•˜์ž.

@Test
public void login() {
	  
	  // ๋„ค์ด๋ฒ„ ์•„์ด๋”” ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ
	  driver.findElement(By.id("id")).sendKeys("******");
	  driver.findElement(By.id("pw")).sendKeys("******");
	  
	  // ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํด๋ฆญ
	  driver.findElement(By.id("log.login")).click();
	  
	  // ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅ
	  File dataFile = new File("./target/browser.data");
	  try {
		  dataFile.delete();
		  dataFile.createNewFile();
		  FileWriter fos = new FileWriter(dataFile);
		  BufferedWriter bos = new BufferedWriter(fos);
		  
		  for (Cookie ck : driver.manage().getCookies()) {
			  bos.write((ck.getName() + ";" + ck.getValue() + ";" + ck.getDomain()
					  + ";" + ck.getPath() + ";" + ck.getExpiry() + ";" + ck.isSecure() ) );
			  bos.newLine();
		  }
		  bos.flush();
		  bos.close();
		  fos.close();
	  } catch (Exception ex) {
		  ex.printStackTrace();
	  }
	  
}

@BeforeMethod
public void beforeMethod() {
	  System.setProperty("webdriver.chrome.driver", "./src/test/resources/drivers/chromedriver");
	  
	  driver = new ChromeDriver();
	  
	  // ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์ง„์ž…
	  driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com");
	  
}

@AfterMethod
public void afterMethod() {
	  driver.quit();
}

 

 

์œ„ ์ฝ”๋“œ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ €์žฅํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ˜„์žฌ ์„ธ์…˜์˜ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ €์žฅํ•œ๋‹ค.

 

for (Cookie ck : driver.manage().getCookies()) {
			  bos.write((ck.getName() + ";" + ck.getValue() + ";" + ck.getDomain()
					  + ";" + ck.getPath() + ";" + ck.getExpiry() + ";" + ck.isSecure() ) );
			  bos.newLine();

 

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, target ํด๋”์— browser.data ํŒŒ์ผ์ด ์ €์žฅ๋œ๋‹ค.

 

์ €์žฅ๋œ ํŒŒ์ผ ํ™•์ธ
์ €์žฅ๋œ ํŒŒ์ผ ํ™•์ธ

 

 

 

 

 

 

์ฟ ํ‚ค ๋กœ๋“œํ•˜๊ธฐ

์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์„ ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์ €์žฅํ•œ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ž๋™ ๋กœ๊ทธ์ธ์— ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. browser.data ํŒŒ์ผ์—์„œ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๋กœ๋“œํ•ด์„œ ๋“œ๋ผ์ด๋ฒ„์— ์ถ”๊ฐ€ํ•˜์ž.

 

@Test
public void loadCookie() {
	  try {
			// ์ฟ ํ‚ค ํŒŒ์ผ์„ ๋กœ๋“œ
		  File dataFile = new File("./target/browser.data");
		  FileReader fr = new FileReader(dataFile);
		  BufferedReader br = new BufferedReader(fr);
		  String line;
		  
		  while ( (line = br.readLine()) != null) {
			  StringTokenizer str = new StringTokenizer(line, ";");
			  while (str.hasMoreTokens()) {
				  String name = str.nextToken();
				  String value = str.nextToken();
				  String domain = str.nextToken();
				  String path = str.nextToken();
				  Date expiry = null;
				  String dt;
				  if (!(dt = str.nextToken()).equals("null")) {
					  SimpleDateFormat formatter = 
							  new SimpleDateFormat("E MMM d HH:mm:ss z yyyy");
					  expiry = formatter.parse(dt);
				  }
				  
				  boolean isSecure = new Boolean(str.nextToken()).booleanValue();
				  
					Cookie ck = new Cookie(name, value, domain, path, expiry, isSecure);
				  
					// ๋“œ๋ผ์ด๋ฒ„์— ์ฟ ํ‚ค ์ „๋‹ฌ
					driver.manage().addCookie(ck);
			  }
		  }
		  
			// ๋„ค์ด๋ฒ„ ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ (๋กœ๊ทธ์ธํ•ด์•ผ ์ •์ƒ ์ด๋™๋จ)
		  driver.get("https://nid.naver.com/user2/help/naverProfile");

			// ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€ ์šฐ์ธก ์ƒ๋‹จ์˜ ๋‹‰๋„ค์ž„ ๋น„๊ตํ•ด์„œ ๋งž์œผ๋ฉด pass
		  assertThat(driver.findElement(By.className("gnb_name"))
				  .getText()).isEqualTo("****");
	  } catch (Exception ex) {
		  ex.printStackTrace();
	  }
	  
}
@BeforeMethod
public void beforeMethod() {
	  System.setProperty("webdriver.chrome.driver", "./src/test/resources/drivers/chromedriver");
	  
	  ChromeOptions chromeOptions = new ChromeOptions();
	
	  driver = new ChromeDriver();
	  driver.get("http://www.naver.com/");
	  
}

@AfterMethod
public void afterMethod() {
	  driver.quit();
}

 

์œ„ ์ฝ”๋“œ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ๊ฐ€์ ธ์˜จ ์ฟ ํ‚ค ๋‚ด์šฉ์„ ๋“œ๋ผ์ด๋ฒ„์— ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

 

Cookie ck = new Cookie(name, value, domain, path, expiry, isSecure);
				  
// ๋“œ๋ผ์ด๋ฒ„์— ์ฟ ํ‚ค ์ „๋‹ฌ
driver.manage().addCookie(ck);

 

 

๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ์— ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด, ์ด๋™์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. (๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋Š” ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด๋„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™๋œ๋‹ค.)

driver.get("https://nid.naver.com/user2/help/naverProfile");

 

ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

๋„ค์ด๋ฒ„ ํ”„๋กœํ•„ ํŽ˜์ด์ง€
๋„ค์ด๋ฒ„ ํ”„๋กœํ•„ ํŽ˜์ด์ง€

 

์šฐ์ธก ์ƒ๋‹จ์˜ ๋„ค์ด๋ฒ„ ๋‹‰๋„ค์ž„์„ ๋น„๊ตํ•˜์—ฌ, ๋‚ด๊ฐ€ ์ €์žฅํ•œ ์ฟ ํ‚ค์˜ ๊ณ„์ • ์ •๋ณด์™€ ๊ฐ™์œผ๋ฉด ์ œ๋Œ€๋กœ ๋œ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋‹ค.

// ํ”„๋กœํ•„ ์ˆ˜์ • ํŽ˜์ด์ง€ ์šฐ์ธก ์ƒ๋‹จ์˜ ๋‹‰๋„ค์ž„ ๋น„๊ตํ•ด์„œ ๋งž์œผ๋ฉด pass
assertThat(driver.findElement(By.className("gnb_name")).getText()).isEqualTo("****");

 

๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค๊ฐ€ ๋กœ๊ทธ์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋‹ค ๋ณด๋‹ˆ ์ฟ ํ‚ค๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„์€ ํ•„์ˆ˜์ ์œผ๋กœ ์•Œ์•„๋‘ฌ์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ž˜ ํ™œ์šฉํ•ด ๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.

 

 

 

 

ํ•จ๊ป˜๋ณด๋ฉด ์ข‹์€ ๊ธ€

 

 

Selenium ๋ฌต์‹œ์  ๋Œ€๊ธฐ์™€ ๋ช…์‹œ์  ๋Œ€๊ธฐ, NoSuchElementException

์›นํŽ˜์ด์ง€ ๋กœ๋”ฉ ์ค‘์— ์›น ํŽ˜์ด์ง€์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ์œผ๋ฉด, ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ(no such element exception)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์˜ ์ด์œ ๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ์ข‹์ง€

dev-yujin.tistory.com

 

 

Selenium ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ œ์–ด , ๋’ค๋กœ๊ฐ€๊ธฐ ์•ž์œผ๋กœ๊ฐ€๊ธฐ ์ƒˆ๋กœ๊ณ ์นจ

๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘์— ํ•˜๋‚˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋™์ž‘์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋™์ž‘์—๋Š” ํŽ˜์ด์ง€ ๋’ค๋กœ๊ฐ€๊ธฐ, ํŽ˜์ด์ง€ ์•ž์œผ๋กœ ๊ฐ€๊ธฐ, ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ๋“ฑ์ด

dev-yujin.tistory.com