Index
셀레니움이란?
셀리니움 WebDrvier Architecture
셀리니움이란?
- 2004년 제이슨 허긴스가 웹 어플리케이션을 스크립트로 테스트를 편하게 목적으로 개발된 오픈소스이다.
- 다양한 언어 및 client 에서 사용할 수 있도록 설계되고 발전되었다.
발전의 역사
- JavaScriptRunner (2004년)
- 웹 어플리케이션을 스크립트로 테스트하는 프로그램
- Selenium Core (Selenium RC)
- 테스트 스크립트와 브라우저 사이에서 프록시 역할을 하는 서버 구성을 도입 ( Cors 같은 문제를 해결)
- WebDrvier (2009년)
- Simon Stewart 라는 사람이 개발한 크로스 플랫폼 라이브러리로, 사용하기 편한 외부 API를 주입함으로써, 브라우저를 사용자가 편하게 제어할 수 있는 API를 제공해주었습니다.
(복잡성을 많이 덜어내어서 사용성을 올려주었다.)
- 역사에서 알 수 있는 것
- 여러 브라우저들에 공통적으로 적용시키기 위해 발전함
- → Selenium RC에서 언어에 맞게 구현해야 하는 많은 것들을 최소화 하기 위해 공통적으로 뽑아내서 WebDriver로 만든 것을 보면 알 수 있음
- 테스트하는 환경을 자유롭게 할 수있도록 발전함
- → 프록시를 도입해서, 테스트 도중에 발생하는 CORS 문제를 해결한 것을 보면 알 수 있음
Selenium Libaray Layer
셀레니움의 라이브러리의 구조는 다음과 같이 되어 있다. 각 구조가 어떤 역할을 하는지 알아보도록 하자.
1 Closure Library
- 이 라이브러리는 기본 요소와 모듈화 메커니즘을 제공하여 소스 파일을 집중적으로 유지하고 최소한의 크기로 유지할 수 있도록 합니다.
- Closure 컴파일러가 라이브러리에서 사용하는 모듈화 기술을 이해하기 때문에 채택하였습니다..
- Closure 컴파일러는 Javascript를 출력 언어로 지원하는 컴파일러입니다. "컴파일"은 입력 파일을 종속성 순서대로 정렬하고 연결하여 예쁘게 출력하는 것만으로 간단할 수도 있고, 고급 최소화와 데드 코드 제거와 같은 복잡한 작업일 수도 있습니다. 또 다른 명백한 장점은 Javascript 코드 작업을 수행하는 팀의 여러 구성원이 Closure Library에 매우 익숙했다는 점입니다.
(위와 같은 이유로 사용하게 되었다고 합니다.)
(정확히 어떤 느낌인지 잘 모르겠다.)
2 Atoms
- selenium의 원자(atom)은 프로젝트 전반에 걸쳐 널리 사용되기 때문에 다른 브라우저 간에 일관된 동작을 보장할 수 있습니다. 또한 라이브러리가 Javascript로 작성되어 개발 주기를 실행하는 데 특별한 권한이 필요하지 않기 때문에 쉽고 빠릅니다.
(이 또한 마찬가지로.. 이해하기 어렵다..)
3 WebDrvier + SeleniumCore
- 우리가 사용하는 외부 API를 작동시키기 위한 많은 구현들이 들어있다.
Web Drvier Architecture
WebDriver를 활용하여 Browser를 컨트롤하기 위해 아래와 같은 구조를 갖고 동작하게 된다.
각 요소가 어떤 역할을 하는지 알아보자
1 Selenium Clinet Libraies
- 다양한 언어 바인딩을 지원하는 클라이언트 라이브러리이다.
- 많은 언어에서 API를 호출하더라도, 각 언어에 맞게끔 변환해서 Browser Driver에게 명령을 전달한다고 생각하면 좋을거 같다.
2 JSON Wire 프로토콜 (HTTP)
- Json 오브젝트 + HTTP 통신을 통해서 Browser Driver에 사용자가 사용한 API Call을 한다.
3 Browser Drivers
- Selenium 브라우저 드라이버는 실제 드라이버와 통신을 주고 받으면서 명령을 주고 받는다.
4 Real Broswers
- 실제 작동할 때 보이는, 우리가 사용하는 브라우저라고 생각하면 된다.
핵심은 Broswer Driver 를 통해서 실제 브라우저를 관리한다고 생각하면 된다.
Reference
The Architecture of Open Source Applications (Volume 1)Selenium WebDriver
Architecture of Selenium WebDriver | BrowserStack