Selenium WebDriver를 사용하면 웹 페이지의 JavaScript 변수 값을 읽어올 수 있습니다. Selenium은 executeScript 메서드를 통해 JavaScript 명령을 실행할 수 있으며, 실행하고자 하는 JavaScript 코드를 해당 메서드의 인자로 전달하면 됩니다.
또한 JavaScript 관련 기능을 사용하기 위해서는 import org.openqa.selenium.JavascriptExecutor 구문을 코드에 추가해야 합니다.
기본 문법
JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript("return document.title")위 문법은 driver 객체를 JavascriptExecutor 타입으로 형 변환한 뒤, executeScript 메서드에 JavaScript 코드를 전달하여 실행하는 방식입니다. return 키워드를 사용하면 JavaScript 실행 결과값을 Java 코드로 반환받을 수 있습니다.
예제: 브라우저 페이지 제목 읽기
이번 예제에서는 JavaScript 변수에서 값을 읽어와 아래 페이지의 브라우저 제목을 확인해 보겠습니다. 예상되는 출력 결과는 About Careers at Tutorials Point – Tutorialspoint 입니다.
코드 구현
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.JavascriptExecutor;
public class JavascriptReadValue{
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.tutorialspoint.com/about/about_careers.htm")
driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
// 값 읽기를 위한 Javascript executor 설정
JavascriptExecutor j = (JavascriptExecutor) driver;
// document.title로 브라우저 제목 가져오기
String t = (String)j.executeScript("return document.title");
System.out.print("Current page title: " +t);
driver.close();
}
}코드 설명
1. 먼저 ChromeDriver의 경로를 시스템 속성으로 지정합니다.
2. ChromeDriver 객체를 생성하고 대상 웹 페이지로 이동합니다.
3. implicitlyWait를 설정하여 요소가 로드될 때까지 최대 12초간 대기합니다.
4. WebDriver 객체를 JavascriptExecutor로 캐스팅합니다.
5. executeScript 메서드에 return document.title을 전달하여 페이지 제목을 반환받습니다.
6. 반환된 값은 Object 타입이므로 String으로 형 변환한 후 출력합니다.
7. 마지막으로 driver.close()로 브라우저를 종료합니다.
실행 결과
코드를 실행하면 콘솔에 다음과 같이 현재 페이지의 제목이 출력됩니다.

이처럼 executeScript 메서드를 활용하면 document.title 외에도 document.getElementById 등 다양한 JavaScript 구문을 통해 DOM 요소의 값이나 변수를 자유롭게 조회할 수 있습니다. 이는 자동화 테스트 중 페이지 상태 검증이나 동적 콘텐츠 확인에 매우 유용하게 활용됩니다.