Relative Locators in Selenium 4

Dahun Yoo·2022년 2월 12일
1
post-thumbnail

Selenium 4 이상버전에서 새롭게 추가된, Relative Locator에 대해 간단히 기재해봅니다.


Relative locators

기존의 Selenium에서, 웹페이지에서 요소를 찾아낼 때에는 명확하게 해당 요소의 위치를 지정해주거나, cssSelector 를 이용한 상대적탐색을 이용하는 방법이 있었습니다.

특히 cssSelector를 이용하여 각 요소간의 상대적인 위치를 지정한다는 것은 가독성이 좋지 않다는 문제점이 있었는데요, Selenium 4에서부터 각 element의 상대적인 위치를 이용해 WebElement를 확인할 수 있게 되었습니다.

import

먼저 사용하기 위해 해당 패키지를 import합니다.

import org.openqa.selenium.support.locators.RelativeLocator;

Relative locators에는 크게 5가지 방법이 있습니다.

  • above
  • below
  • toRightOf
  • toLeftOf
  • near

above

WebElement above = driver.findElement(RelativeLocator.with((By.tagName("input"))).above(By.tagName("select")));
above.sendKeys("hello world");

select tag의 위에 있는 input tag를 찾습니다.

below

WebElement below = driver.findElement(RelativeLocator.with((By.tagName("input"))).below(By.tagName("select")));
below.sendKeys("Hello world");

select tag의 아래에 있는 input tag를 찾습니다.

toRightOf

//rightof
WebElement rightOf = driver.findElement(RelativeLocator.with(By.xpath("//input[@type='password']")).toRightOf(By.tagName("label")));
rightOf.sendKeys("test");

label에 오른쪽에 있는 패스워드 입력창을 찾습니다.

toLeftOf

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

//near
WebElement near = driver.findElement(RelativeLocator.with(By.partialLinkText("THE")).near(By.linkText("Signin")));
near.click();

Signin 근처에, 링크 텍스트중에 THE가 들어가는 요소를 찾습니다.

Chaining relative locators

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 클래스를 이용한 지정을 합니다.

profile
QA Engineer

0개의 댓글