본문 바로가기
728x90
반응형

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

728x90
반응형

한걸음 한걸음

개인적인 기록