1. Selenium 이란?
셀레니움은 웹사이트 테스트를 위한 도구로 브라우저 동작을 자동화 할 수 있는 프레임워크이다. 실행시키기 위해서는 webdriver가 필수이다.(참고)
1.1. WebDriver
웹 페이지의 DOM 요소를 조작하고 사용자 에이전트의 동작을 명령할 수 있는 원격 제어 인터페이스이다.
chrome, msedge, firefox 등 다양한 브라우저를 지원하고 있다.
1.1.1. 드라이버 사용 방법
- Selenium Manager(Beta)
- 셀레니움 4.6 이상 버전부터 적용할 수 있다.
- WebDriver Manager 등을 보고 자체적으로 만들었다.
- WebDriver Manager
- 셀레니움 웹드라이버에 필요한 드라이버의 관리(다운로드, 설정 및 유지 관리)를 자동화된 방식으로 수행하는 java 오픈소스 라이브러리
- PATH 환경 변수
- 직접 지정
- 각 브라우저 드라이버를 다운받고 저장 경로를 설정하는 방식
1.2. Selenide
셀레니움을 쓰기 쉽도록 Java API를 제공(참고).
셀레니움의 Ajax, 시간 초과 등 문제 해결
- wait(), until() 같은 메소드 보다 should 를 사용해서 변경된 요소 확인 및 시간 문제까지 같이 해결 할 수 있다.
- 테스트가 실패하면 selenide는 자동으로 스크린샷을 찍고 저장한다.
- 셀레니움보다 코드가 간결해 진다.(참고)
1.3. Wait
WebDriver 를 통해서 테스트를 진행할 때 렌더링이 되지 않아서 요소를 찾는 경우 오류가 발생하는 경우가 있다.
1.3.1. 해결 방법
Selenium
- Explicit wait : 주어진 조건을 통과할 때까지 정해진 시간동안 프로그램 실행 중단할 수 있다.
WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(By.xpath("//"))
- Implicit wait : 정해진 시간만큼 멈춰있는다.(기본 설정)
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10))
Selenide : Should, ShouldBe, ShouldHave
- 셀레니움의 until() + assert 를 합친 것과 같은 기능을 한다.
- 주어진 시간 동안 조건을 통과할 때까지 기다린다. 시간이 다 되기 전에 통과하면 다음으로 바로 넘어간다.
element.shouldBe(Condition.disappear, Duration.ofSeconds(10))
2. Selenium Page Object
2.1. POM(Page Object Models)
페이지 별(기능 별)로 객체를 만들어서 테스트 코드를 작성할 때에는 객체와 메소드를 가져다 사용하는 방식의 디자인 패턴
적용 전
@Test
fun 최고관리자_로그인() {
val base: String = "https://www.@@@.com/"
element(Selectors.byXpath("//input[@id='userId']")).sendKeys("abc123")
element(Selectors.byXpath("//input[@id='password']")).sendKeys("abc123")
element("button[id='btnLogin']").click()
assertEquals("https://www.@@@.com/dashboard", WebDriverRunner.getWebDriver().currentUrl)
}
적용 후
// page_url = https://www.@@@.com
class Login {
val id: String = "abc123"
val password: String = ""
val userId = element(byXpath("//input[@id='userId']"))
val password = element(byXpath("//input[@id='password']"))
val loginBtn = element("button[id='btnLogin']")
fun login() {
this.userId.sendKeys(id)
this.password.sendKeys(password)
this.loginBtn.click()
}
}
Login Test
@Test
fun 최고관리자_로그인() {
login.login()
assertEquals("https://www.@@@.com/dashboard", WebDriverRunner.getWebDriver().currentUrl)
}
장점
- 테스트 코드와 페이지 별 코드 사이에 구분이 되어있어서 유지보수가 쉽다.
참고
- 검증 코드는 페이지 객체가 아닌 테스트 코드에만 있어야 한다.
- 페이지 객체 내에 전체 페이지를 나타낼 필요 없다.
2.2. Web Inspector
Aqua에서 돋보기 아이콘 클릭 시 해당 페이지를 볼 수 있다.
특징
- 요소 위치를 바로 코드로 옮길 수 있다.
- 요소를 코드로 옮길 때 text, css, tag, xpath 등으로 추가할 수 있다.
- 개발자 도구도 같이 볼 수 있다.
3. Aqua
Aqua는 아직 베타 버전으로 All Products Pack에 포함되어 있지 않다.
JetBrains에서 나온 QA 자동화 테스트를 위한 툴
- 따로 플러그인을 설치하지 않아도 Web Inspector, selenium 등 자동으로 추가가 되어있다.
'Etc > Selenium' 카테고리의 다른 글
[Selenium] JavascriptExecutor (0) | 2023.06.25 |
---|---|
[Selenide] 셀레나이드 시작하기 (0) | 2023.06.25 |
[Selenium, Selenide] 셀레니움과 셀레나이드 (0) | 2023.06.24 |
[Selenium] AQUA IDE (0) | 2023.06.24 |