로케이터 전략(Locator strategies)

로케이터 전략(Locator strategies)

페이지에서 원하는 요소를 딱 집어내려면 '어떤 기준으로 찾을지'를 정해야 하는데요, 그 기준을 로케이터(locator)라고 불러요. 로케이터는 페이지에서 하나 또는 여러 개의 특정 요소를 식별하는 방법이에요. 찾기(finding) 메서드에 전달되는 인자가 바로 이 로케이터예요.

로케이터는 단순히 요소를 찾는 도구일 뿐 아니라 테스트의 안정성을 좌우해요. 공식 문서의 권장 테스트 관행에서도 언제 어떤 로케이터를 쓰면 좋은지, 왜 로케이터를 찾기 메서드와 분리해 선언해야 하는지를 다루고 있으니 함께 보면 좋아요.

출처: 로케이터 전략 - Selenium 공식 문서

본문

전통적인 로케이터

WebDriver가 지원하는 전통적인 로케이터 전략은 8가지예요.

로케이터 설명
class name search 값이 포함된 class name을 가진 요소를 탐색(복합 클래스명은 허용되지 않음)
css selector CSS 선택자와 일치하는 요소를 탐색
id search 값과 일치하는 ID 속성을 가진 요소를 탐색
name search 값과 일치하는 NAME 속성을 가진 요소를 탐색
link text 보이는 텍스트가 search 값과 일치하는 앵커 요소를 탐색
partial link text 보이는 텍스트에 search 값이 포함된 앵커 요소를 탐색. 여러 요소가 일치하면 첫 번째 요소만 선택
tag name search 값과 일치하는 태그 이름을 가진 요소를 탐색
xpath XPath 표현식과 일치하는 요소를 탐색

로케이터 만들기

Selenium으로 웹 요소를 다루려면 먼저 그 요소를 페이지에서 찾아야 해요. 이해를 돕기 위해 아래 HTML 조각을 예로 들어볼게요.

<html>
<body>
<style>
.information {
  background-color: white;
  color: black;
  padding: 10px;
}
</style>
<h2>Contact Selenium</h2>

<form>
  <input type="radio" name="gender" value="m" />Male &nbsp;
  <input type="radio" name="gender" value="f" />Female <br>
  <br>
  <label for="fname">First name:</label><br>
  <input class="information" type="text" id="fname" name="fname" value="Jane"><br><br>
  <label for="lname">Last name:</label><br>
  <input class="information" type="text" id="lname" name="lname" value="Doe"><br><br>
  <label for="newsletter">Newsletter:</label>
  <input type="checkbox" name="newsletter" value="1" /><br><br>
  <input type="submit" value="Submit">
</form>

<p>To know more about Selenium, visit the official page
<a href ="www.selenium.dev">Selenium Official Page</a>
</p>

</body>
</html>

이 HTML에서 각 로케이터가 어떻게 요소를 짚는지 하나씩 보면 금방 익숙해져요.

class name

웹 요소는 class 속성을 가질 수 있어요. 위 HTML 조각에서도 그 예를 볼 수 있는데요, Selenium의 class name 로케이터로 이런 요소를 식별할 수 있어요. 아래는 Java 예시예요.

WebElement element = driver.findElement(By.className("information"));

이 스니펫처럼, CSS 선택자니 ID니 하는 각 로케이터는 By 클래스의 메서드로 호출돼요. 정확한 메서드 이름은 언어 바인딩마다 조금씩 다르지만(예: Python은 By.CLASS_NAME), 로케이터 종류 자체는 위 8가지로 동일해요. 언제 어느 로케이터가 유리한지는 페이지 구조와 테스트 의도에 따라 달라지므로, 우선은 이 8가지를 손에 익혀 두는 게 중요해요.

더 알아보기