Selenium
웹 어플리케이션을 테스트하기 위한 프레임워크
주로 크롬 등의 브라우저를 이용해서 해당 웹 어플리케이션에 접속하여 코딩된대로 액션을 실행해줌.
수강신청, 예매 등 매크로로 이용할 수 있을 것 같고, 동적인 페이지에서도 크롤링이 가능해보임
리눅스 CLI 환경에서도 옵션을 통해 웹 브라우저를 띄우지 않고 가능
1. 프레임워크 설치
맞는 버전 다운로드 후 안에 들어가있는 jar 파일들과 lib안 파일들 Java build path에 등록
(properties – java build path)
2. 크롬을 이용하여 접속할 것이기 때문에 chrome driver 다운로드
3. 크롬이 없다면 크롬도 다운로드 (크롬 드라이버와 버전 맞출 것)
— 코드 작성
package crwaling_test; import java.util.Date; import org.openqa.selenium.By; import org.openqa.selenium.support.ui.Select; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class SeleniumTest { public static void main(String[] args) throws Exception{ //로그 기록용 Date today = new Date(); System.out.println("--------------------------------------"); System.out.println("Date : " + today); System.out.println("--------------------------------------"); SeleniumTest selTest = new SeleniumTest(); selTest.login(); //로그인 메서드 실행 Thread.sleep(2000); System.out.println("..."); System.out.println("Program shutdown..."); } // WebDriver private WebDriver driver; private WebElement element; private String base_url; // Properties public static final String WEB_DRIVER_ID = "webdriver.chrome.driver"; public static final String WEB_DRIVER_PATH = "D:/05.workspace/selenium/chromedriver.exe"; //윈도우에서 기동 // public static final String WEB_DRIVER_PATH = "/usr/bin/chromedriver"; //리눅스에서 기동 public SeleniumTest() { super(); // System Property SetUp System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH); //드라이버ID, PATH 설정 ChromeOptions options = new ChromeOptions(); /* options.addArguments("--headless"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); driver = new ChromeDriver(options); //리눅스 시 사용 */ driver = new ChromeDriver(); //윈도우시 사용 base_url = "접속할 주소"; } public String login() { String license = ""; try { driver.get(base_url); //페이지 접속 // driver.switchTo().frame(driver.findElement(By.id("loginForm"))); driver.findElement(By.id("id")).sendKeys("아이디입력"); driver.findElement(By.id("password")).sendKeys("비밀번호입력"); driver.findElement(By.className("loginbtn")).submit(); //ID, PW 입력 후 로그인 } catch (Exception e) { e.printStackTrace(); } finally { driver.close(); } } }
위 코드는 연습용으로 만들었음 셀레니움 테스트 (홈페이지 로그인)
해당 홈페이지는 내 홈페이지여서 아마 안될거
직접 사용하기 위해서 위 코드에서 수정할부분
// Properties public static final String WEB_DRIVER_ID = "webdriver.chrome.driver"; public static final String WEB_DRIVER_PATH = "D:/05.workspace/selenium/chromedriver.exe"; //윈도우에서 기동 // public static final String WEB_DRIVER_PATH = "/usr/bin/chromedriver";
WEB_DRIVER_PATH 에 2. 에서 받은 chromedriver.exe 경로를 입력해줌
public String login() { String license = ""; try { driver.get(base_url); //페이지 접속 // driver.switchTo().frame(driver.findElement(By.id("loginForm"))); driver.findElement(By.id("id")).sendKeys("아이디입력"); driver.findElement(By.id("password")).sendKeys("비밀번호입력"); driver.findElement(By.className("loginbtn")).submit(); //ID, PW 입력 후 로그인 } catch (Exception e) { e.printStackTrace(); } finally { driver.close(); } }
base_url 자리에 이동할 사이트 입력
driver.findElement(By.~) 로 원하는 요소를 찾아 액션을 수행할 수 있는데, 이 요소를 찾는 방법은 크롬 – F12를 눌러서 쉽게 찾을 수 있음.
그 뒤에는 . 을 이용해 체인을 걸어 비밀번호 입력이나 클릭 등을 수행할 수 있다.

(1)버튼을 클릭하여 원하는 요소(2)를 클릭하면 자동으로 해당 코드를 보여주게 됨
(3)번 위에서 우클릭 – Copy 를 확인해보면 full Xpath, selector 등으로 원하는 요소를 빠르게 선택할 수 있다. [ findElement(By.cssselector, xpath 등) 이용 하면 됨]
모달박스나 새 창이 뜰 경우
driver.switchTo().frame(“옵션”) 등으로 유연한 대처가 가능함 자세한 요소는 공식문서 참조
https://www.selenium.dev/selenium/docs/api/java/overview-summary.html