로케이터 전략(Locator strategies)
로케이터 전략(Locator strategies)
페이지에서 원하는 요소를 딱 집어내려면 '어떤 기준으로 찾을지'를 정해야 하는데요, 그 기준을 로케이터(locator)라고 불러요. 로케이터는 페이지에서 하나 또는 여러 개의 특정 요소를 식별하는 방법이에요. 찾기(finding) 메서드에 전달되는 인자가 바로 이 로케이터예요.
로케이터는 단순히 요소를 찾는 도구일 뿐 아니라 테스트의 안정성을 좌우해요. 공식 문서의 권장 테스트 관행에서도 언제 어떤 로케이터를 쓰면 좋은지, 왜 로케이터를 찾기 메서드와 분리해 선언해야 하는지를 다루고 있으니 함께 보면 좋아요.
본문
전통적인 로케이터
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
<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가지를 손에 익혀 두는 게 중요해요.