앞서 UI 자동화에 대한 기본적인 개요 및 네이버 자동 로그인을 IE 11과 Chrome(66 Stable)로 테스트 해보았습니다.
이제 제대로 업무에 적용하기에 앞서 자동화가 이루어지기 위해서 빠지지 않는 webDriver에 대해 조사해보았습니다.
Selenium WebDriver
Selenium webDriver(셀레니엄 웹드라이버) 는 많은 브라우저(FireFox,Edge,InternetExplorer,Chrome...) , 운영체제 및 프로그래밍언어(ruby,js,C#,JAVA,Python .. ) 등을 지원하며 웹 응용 프로그램들의 테스트 를 단순화 함과 동시에 가속화를 도와주는 툴입니다.
해당 Selenium WebDriver 가나오기전 있었던 Selenium Remote Control(RC) 버전이 있었습니다.
해당 제품의 구동 방식은 이와 같습니다.
[Chrome]
Chrome 바이너리가 실행 되고 Remote Controller를 통해서 해당 Chrome에 메시지를 전달하고 다시 받고 다시 전달 하는 방식을 취득하였으며 지원되는 브라우저도 적었으며 RC구현으로 인해 OS의 제약도 많았습니다.
또한 해당 메시지 방식을 취득 하다 보니 실제 사용자의 동작으로 보이지 않는 경우도 있었습니다.
이러저러한 문제점으로 인해 Selenium WebDriver(2.0) 이 webDriver + Selenium1.0 으로 나오게 되었으며
Selenium WebDriver 의 장점이 있습니다.
1. 다채로운 프로그래밍 언어 지원
기존의 Selenium IDE와는 다르게 Java,PHP,Perl,Ruby,Python,C#,JS 등을 지원합니다.
2. 매우 단순한 사용 법
기존의 RC사용법은 RC실행 + 드라이버 세팅 + Selenium 세팅 및 스크립트가 따로 가야 하지만
WebDriver는 StandardAlone으로 내부적으로 한번에 스크립트를 사용하여 제어합니다.
3. 실제 사용자 동작을 예뮬레이션 합니다.
동작 내용을 확인해 보면 아실수 있겠지만 WebElement 등을 클릭할때 마우스로 인한 포커싱이 되는 모습을 확인
이가능합니다.
4. 기존보다 스크립트 실행 속도가 빠릅니다.
- 해당은 제가 기존을 사용하지 않아서 확인을 못해봤습니다.
5. API 지원
WebDriver API 를 통해서 어렵지 않게 개발등이 가능합니다.
(JS로 하는에 손쉬운거 같진 않지만)
chromedriver.exe가 하는 역할은 selenium에서 webdriver명령을 보낼때 크롬을 제어 하는 방법 을 제공해주는데
이를 크롬 57버전까지는 자동화 확장 기능을 사용하여 크롬과 통신을 원할하게 하였지만
크롬 58 버전 부터는 확장 기능을 제거하고 WebSocket 통신을 사용하고 원격 디버깅을 지원하는 크롬의 dev tool api 에서 모든것을 제어하는 방법으로 바뀌었습니다.
그러므로 자동화 실행시에는 위의 크롬은 현재 자동화 테스트 소프트웨어로 인해 제어되고 있습니다. 라는 메시지가 나타납니다.
설명이 매우 부실해보이지만.. 필요하면 더 추가하겠습니다.
Selenium 관련하여 이슈 트래킹 사이트가 있습니다.
안되 는 것이 있을 경우 이슈트래킹에서
확인 해보시기 바랍니다.
https://github.com/SeleniumHQ/selenium/issues
또한 최근에(?) 만들어지는 Selenium 개발자가 직접 프로젝트를 합쳐서 만드는 4.0 Alpha 버전에 대한
지원 레밸 정의입니다.
대충 보면
이슈를 재기해도 고치진 않을것이고 fix되지 않은 API 에 대한 보장은 해주지 않겠지만
최선을 다해서 내부적으로 이슈를 찾아서 고칠 것이며 selenium 은 플랫폼 API 와 호환 API 를 릴리즈 한다.
Support Level Definitions
supported: A selenium-webdriver release will be API compatible with the platform API, without the use of runtime flags.
best effort: Bugs will be investigated as time permits. API compatibility is only guaranteed where required by a supported release. This effectively means the adoption of new JS features, such as ES2015 modules, will depend on what is supported in Node's LTS.
unsupported: Bug submissions will be closed as will-not-fix and API compatibility is not guaranteed.