메뉴 닫기

파이썬 Selenium 상대 로케이터 above below near to_left_of to_right_of 사용법 예제

파이썬 Selenium 상대 로케이터 above below near to_left_of to_right_of 사용법 예제

🚀 웹 자동화의 핵심, Selenium 상대 로케이터 활용법을 알면 실전 테스트가 쉬워집니다

테스트 자동화를 위해 Selenium을 사용하다 보면 특정 요소를 직접 찾기 어려운 상황이 자주 생깁니다.
특히 동적으로 생성되는 버튼이나 입력창 같은 경우에는 고정된 Xpath나 CSS 선택자로만 접근하기 번거롭죠.
이럴 때 유용하게 활용할 수 있는 기능이 바로 상대 로케이터(Relative Locator)입니다.
상대 로케이터는 화면에 배치된 다른 요소를 기준으로 원하는 대상을 찾을 수 있게 해주기 때문에, 유지보수와 코드 가독성을 동시에 높여줍니다.
이번 글에서는 Selenium 4에서 새롭게 추가된 relative locator 문법과 함께 자주 사용하는 above, below, near, to_left_of, to_right_of 예제를 중심으로 살펴보겠습니다.

이 글을 읽으면 Selenium 초보자도 상대 로케이터를 자유롭게 활용할 수 있으며, 테스트 자동화 코드 작성 시 흔히 부딪히는 요소 탐색 문제를 손쉽게 해결할 수 있게 됩니다.
또한 단순히 개념 설명에 그치지 않고 실제 파이썬 코드 예제를 통해, 실무에서도 바로 적용할 수 있도록 안내하니 끝까지 읽어보시면 큰 도움이 될 것입니다.



🔗 Selenium 상대 로케이터란 무엇인가

웹 자동화 테스트를 진행할 때 가장 중요한 작업 중 하나는 원하는 HTML 요소를 정확하게 찾아내는 일입니다.
하지만 웹사이트 구조가 자주 바뀌거나 동적으로 생성되는 요소가 많을 경우, 기존의 XPATHCSS 선택자만으로는 한계가 있습니다.
이 문제를 해결하기 위해 Selenium 4에서 새롭게 도입된 기능이 바로 상대 로케이터(Relative Locator)입니다.

상대 로케이터는 다른 요소를 기준점으로 삼아 대상 요소를 찾아내는 방법입니다.
즉, 버튼이나 입력창을 특정 기준 요소의 위(above), 아래(below), 왼쪽(to_left_of), 오른쪽(to_right_of), 가까이(near)에 있다는 조건을 지정할 수 있습니다.
이 방식은 화면에 표시되는 레이아웃 구조를 기준으로 하기 때문에, HTML 구조가 다소 변하더라도 자동화 스크립트가 더 안정적으로 동작할 수 있습니다.

📌 상대 로케이터의 주요 장점

  • 레이아웃을 기준으로 탐색하기 때문에 코드 변경에 강합니다.
  • 코드 가독성이 높아져 협업 시 이해하기 쉽습니다.
  • 동적인 요소를 대상으로 할 때 안정적인 선택이 가능합니다.

📌 상대 로케이터 기본 문법

CODE BLOCK
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

# 예시: 특정 버튼을 기준으로 위에 있는 입력창 찾기
element = driver.find_element(locate_with(By.TAG_NAME, "input").above(By.ID, "loginButton"))

💡 TIP: 상대 로케이터는 반드시 locate_with() 함수를 사용해야 하며, 기준이 되는 요소를 정확히 지정하는 것이 중요합니다.

🛠️ 파이썬 환경에서 Selenium 기본 설정

상대 로케이터를 활용하기 전에 Selenium을 사용할 수 있는 환경을 먼저 준비해야 합니다.
Python 환경에서 Selenium을 설치하고 크롬 드라이버를 연동하는 과정이 기본이 됩니다.
아래 단계들을 차근차근 따라 하면 초보자도 쉽게 준비할 수 있습니다.

📌 Selenium 설치

CODE BLOCK
pip install selenium

명령 프롬프트나 터미널에서 위 명령어를 실행하면 최신 버전의 Selenium이 설치됩니다.
Selenium 4 이상 버전에서만 상대 로케이터 기능을 사용할 수 있으니 반드시 최신 버전을 설치하는 것이 중요합니다.

📌 크롬 드라이버 연결

Selenium이 웹 브라우저를 제어하려면 웹드라이버가 필요합니다.
Google Chrome을 기준으로는 ChromeDriver를 다운로드해야 합니다.
크롬 브라우저의 버전에 맞는 드라이버를 설치하고, 실행 코드에서 드라이버 경로를 지정하면 됩니다.

CODE BLOCK
from selenium import webdriver

# 크롬 드라이버 실행
driver = webdriver.Chrome()

# 웹사이트 접속
driver.get("https://www.example.com")

⚠️ 주의: Chrome 브라우저 버전과 ChromeDriver 버전이 맞지 않으면 실행이 되지 않습니다. 반드시 동일한 버전을 맞춰 설치해야 합니다.

📌 상대 로케이터 모듈 불러오기

상대 로케이터를 활용하기 위해서는 다음과 같이 모듈을 반드시 불러와야 합니다.

CODE BLOCK
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

💎 핵심 포인트:
환경 설정이 끝나면 이제부터 상대 로케이터를 활용해 다양한 위치 기준으로 요소를 찾을 수 있습니다.



⚙️ above와 below 활용 예제

상대 로케이터의 가장 대표적인 사용법은 특정 요소를 기준으로 위(above)나 아래(below)에 있는 요소를 찾는 것입니다.
예를 들어 로그인 버튼 위에 있는 입력창이나, 특정 레이블 아래에 있는 텍스트 필드를 찾을 때 유용하게 활용됩니다.

📌 above 예제

CODE BLOCK
# 로그인 버튼 위에 있는 입력창 찾기
login_btn = driver.find_element(By.ID, "loginButton")
username_input = driver.find_element(
    locate_with(By.TAG_NAME, "input").above(login_btn)
)

위 코드에서는 loginButton 요소 위쪽에 있는 input 태그를 탐색합니다.
즉, 로그인 버튼 위에 위치한 사용자 이름 입력창을 쉽게 선택할 수 있습니다.

📌 below 예제

CODE BLOCK
# "Email" 라벨 아래에 있는 입력창 찾기
email_label = driver.find_element(By.XPATH, "//label[text()='Email']")
email_input = driver.find_element(
    locate_with(By.TAG_NAME, "input").below(email_label)
)

위 예제는 ‘Email’이라는 텍스트를 가진 라벨을 기준으로 바로 아래에 있는 입력창을 찾습니다.
폼 구조에서 레이블과 입력창이 쌍으로 배치되는 경우가 많기 때문에, below 로케이터는 매우 자주 활용됩니다.

💡 TIP: 위/아래 탐색은 특히 폼(Form) 요소 자동화에서 많이 쓰입니다. 아이디, 비밀번호 입력창과 같은 구조적인 UI 테스트에 매우 효과적입니다.

📌 above와 below 비교

로케이터 설명
above 기준 요소의 바로 위에 있는 요소를 탐색
below 기준 요소의 바로 아래에 있는 요소를 탐색

🔌 to_left_of와 to_right_of 예제

웹 페이지에서 버튼이나 입력창은 종종 나란히 배치되는 경우가 많습니다.
이럴 때 특정 요소를 기준으로 왼쪽 또는 오른쪽에 있는 대상을 찾고 싶을 때 사용하는 것이 to_left_ofto_right_of 입니다.

📌 to_left_of 예제

CODE BLOCK
# 비밀번호 입력창 왼쪽에 있는 사용자 아이디 입력창 찾기
password_input = driver.find_element(By.ID, "password")
username_input = driver.find_element(
    locate_with(By.TAG_NAME, "input").to_left_of(password_input)
)

위 예제는 password 입력창을 기준으로 왼쪽에 있는 입력창을 탐색합니다.
주로 로그인 폼에서 아이디와 비밀번호 입력창이 나란히 배치된 경우에 활용할 수 있습니다.

📌 to_right_of 예제

CODE BLOCK
# "아이디 저장" 체크박스 오른쪽에 있는 라벨 찾기
checkbox = driver.find_element(By.ID, "rememberMe")
label = driver.find_element(
    locate_with(By.TAG_NAME, "label").to_right_of(checkbox)
)

이 코드는 rememberMe 체크박스를 기준으로 오른쪽에 있는 라벨을 선택합니다.
실제 로그인 폼에서는 “아이디 저장” 같은 체크박스 옆에 설명 문구가 붙어있기 때문에 이런 상황에서 유용합니다.

💡 TIP: 좌우 탐색은 버튼 그룹이나 체크박스-라벨 조합처럼 수평 배치된 UI에서 활용도가 높습니다. CSS 선택자로 복잡하게 접근하는 것보다 훨씬 간단합니다.

📌 좌우 탐색 시 주의할 점

⚠️ 주의: 요소가 겹쳐 있거나 화면 크기에 따라 반응형 레이아웃이 바뀌는 경우 좌우 탐색이 의도와 다르게 작동할 수 있습니다. 반드시 테스트 환경과 실제 환경을 동일하게 유지하세요.



💡 near를 활용한 요소 탐색

상대 로케이터에서 near는 특정 요소와 가까이에 있는 요소를 찾을 때 사용됩니다.
위, 아래, 좌, 우와 달리 정확한 위치 방향이 필요하지 않고, 단순히 일정 범위 내에 존재하는 요소를 탐색할 때 유용합니다.

📌 near 기본 예제

CODE BLOCK
# 검색 버튼 근처에 있는 입력창 찾기
search_button = driver.find_element(By.ID, "searchBtn")
search_input = driver.find_element(
    locate_with(By.TAG_NAME, "input").near(search_button)
)

위 코드는 검색 버튼을 기준으로 가까운 위치에 있는 입력창을 탐색합니다.
검색창 옆에 검색 버튼이 나란히 붙어있는 UI 환경에서 매우 효과적으로 활용됩니다.

📌 near 활용의 장점

  • 🔎위치 방향에 구애받지 않고 범위 내 요소 탐색이 가능
  • 🔎동적 UI에서 요소 위치가 조금씩 바뀌더라도 안정적으로 탐색
  • 🔎검색창-버튼, 체크박스-라벨 등 인접 관계 요소 탐색에 최적화

📌 주의할 점

⚠️ 주의: near는 기준 요소와의 거리 계산을 기반으로 하기 때문에 화면 구조가 복잡하거나 근처에 유사한 요소가 여러 개 있을 경우 의도하지 않은 요소를 선택할 수 있습니다. 반드시 테스트 환경에서 여러 케이스를 검증하는 것이 필요합니다.

💎 핵심 포인트:
near는 방향이 아닌 거리 기반 탐색이라는 점에서 다른 로케이터와 차별화됩니다. 따라서 UI 변경에 대응하기 유연합니다.

자주 묻는 질문 (FAQ)

상대 로케이터는 Selenium 몇 버전부터 지원되나요?
Selenium 4 버전부터 지원됩니다. Selenium 3에서는 사용할 수 없으니 반드시 최신 버전을 설치해야 합니다.
relative locator를 사용할 때 꼭 locate_with()를 써야 하나요?
네, Selenium 4에서는 상대 로케이터를 사용할 때 반드시 locate_with()를 통해 요소를 지정해야 합니다.
above와 below는 언제 가장 많이 쓰이나요?
로그인 폼이나 입력창과 레이블처럼 위아래로 쌍을 이루는 구조에서 가장 많이 사용됩니다.
to_left_of와 to_right_of는 반응형 웹에서도 잘 동작하나요?
기본적으로는 동작하지만, 화면 크기에 따라 UI가 세로로 재배치되면 원하는 결과가 나오지 않을 수 있습니다.
near는 어느 정도 거리를 기준으로 탐색하나요?
Selenium 내부적으로 일정 픽셀 범위를 기준으로 가까운 요소를 판단합니다. 명확한 거리 지정은 불가능합니다.
상대 로케이터를 CSS 선택자와 함께 사용할 수 있나요?
네, CSS 선택자 또는 XPATH를 기준 요소로 지정한 뒤 relative locator를 적용할 수 있습니다.
모바일 웹 테스트에서도 relative locator가 유용한가요?
네, 모바일 화면에서도 요소의 상대적 위치를 기준으로 탐색할 수 있어 테스트 코드 재사용성이 높아집니다.
상대 로케이터와 기존 By.ID, By.CLASS_NAME 중 어떤 것이 더 좋은가요?
고정된 ID나 클래스가 있다면 By.ID, By.CLASS_NAME이 더 정확합니다. 그러나 UI가 자주 변한다면 상대 로케이터가 더 유리합니다.

📝 Selenium 상대 로케이터 활용으로 테스트 자동화 완성하기

이번 글에서는 Selenium 4에서 제공하는 상대 로케이터 기능을 정리해 보았습니다.
기존의 고정된 XPATH나 CSS 선택자 방식은 유지보수가 어려웠지만, above, below, to_left_of, to_right_of, near 같은 상대 로케이터를 활용하면 UI 변경에도 훨씬 유연하게 대응할 수 있습니다.
특히 로그인 폼, 검색창, 버튼 그룹처럼 일정한 배치 패턴이 있는 곳에서는 매우 강력한 기능으로 작동합니다.

테스트 자동화를 시작하는 분들에게는 상대 로케이터가 다소 생소할 수 있지만, 실제 예제를 따라 연습하다 보면 금세 익숙해집니다.
앞으로 웹 UI 자동화를 진행할 때는 기본 선택자와 함께 상대 로케이터를 병행하여 사용하는 습관을 들이면 코드 품질과 안정성을 동시에 확보할 수 있습니다.


🏷️ 관련 태그 : Selenium, 파이썬자동화, 웹테스트, 상대로케이터, UI테스트, 테스트코드, QA자동화, 웹개발, 파이썬기초, Selenium4