Selenium 4 이상버전에서 새롭게 추가된, Relative Locator에 대해 간단히 기재해봅니다.
기존의 Selenium에서, 웹페이지에서 요소를 찾아낼 때에는 명확하게 해당 요소의 위치를 지정해주거나, cssSelector
를 이용한 상대적탐색을 이용하는 방법이 있었습니다.
특히 cssSelector
를 이용하여 각 요소간의 상대적인 위치를 지정한다는 것은 가독성이 좋지 않다는 문제점이 있었는데요, Selenium 4에서부터 각 element의 상대적인 위치를 이용해 WebElement를 확인할 수 있게 되었습니다.
먼저 사용하기 위해 해당 패키지를 import합니다.
import org.openqa.selenium.support.locators.RelativeLocator;
Relative locators에는 크게 5가지 방법이 있습니다.
WebElement above = driver.findElement(RelativeLocator.with((By.tagName("input"))).above(By.tagName("select")));
above.sendKeys("hello world");
select
tag의 위에 있는 input
tag를 찾습니다.
WebElement below = driver.findElement(RelativeLocator.with((By.tagName("input"))).below(By.tagName("select")));
below.sendKeys("Hello world");
select
tag의 아래에 있는 input
tag를 찾습니다.
//rightof
WebElement rightOf = driver.findElement(RelativeLocator.with(By.xpath("//input[@type='password']")).toRightOf(By.tagName("label")));
rightOf.sendKeys("test");
label
에 오른쪽에 있는 패스워드 입력창을 찾습니다.
WebElement leftOf = driver.findElement(RelativeLocator.with(By.linkText("Signin")).toLeftOf(By.xpath("//*[@id=\"load_form\"]/div[1]/div[2]/input")));
System.out.println(leftOf.getText());
특정 xpath를 가진 요소의 왼쪽에 있는 Signin
텍스트를 가진 링크를 찾습니다.
//near
WebElement near = driver.findElement(RelativeLocator.with(By.partialLinkText("THE")).near(By.linkText("Signin")));
near.click();
Signin
근처에, 링크 텍스트중에 THE
가 들어가는 요소를 찾습니다.
relative locator를 조합해서 사용할 수 있습니다.
//password
//
driver.findElement(RelativeLocator.with(By.tagName("input"))
.above(By.linkText("Signin"))
.below(By.xpath("//*[@id=\"load_form\"]/fieldset[6]/input"))
).sendKeys("ksdfkdskf");
링크텍스트 signin
을 가진 요소의 위에 있으며, 특정 xpath를 가진 요소의 아래에 있는, 두 개의 사이의 요소를 찾습니다.
로케이터 지정에는 기존에 사용하던 By
클래스를 이용한 지정을 합니다.