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
'IT 공부 > Java' 카테고리의 다른 글
[JavaScript] 카테고리 이동 JavaScript 로 구현해보기 (LocalStorage) (0) | 2024.06.18 |
---|---|
[JavaScript] 메뉴 카테고리 JavaScript 로 구현하기 (LocalStorage) (0) | 2024.06.14 |
[Java] GC Log Analyzer(IBM GA) 분석하기 (0) | 2024.03.21 |
[Java] GC Log 에 관하여 (0) | 2024.03.19 |
[Java] JMX (Java Management Extensions) (0) | 2024.03.08 |