ํด๋น ํฌ์คํธ๋ 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