Selenium 사용해보기

Selenium

웹 어플리케이션을 테스트하기 위한 프레임워크

주로 크롬 등의 브라우저를 이용해서 해당 웹 어플리케이션에 접속하여 코딩된대로 액션을 실행해줌.

수강신청, 예매 등 매크로로 이용할 수 있을 것 같고, 동적인 페이지에서도 크롤링이 가능해보임

리눅스 CLI 환경에서도 옵션을 통해 웹 브라우저를 띄우지 않고 가능

1. 프레임워크 설치

https://www.selenium.dev/downloads

맞는 버전 다운로드 후 안에 들어가있는 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

Leave a Comment