The future of Selenium

Introduction of Speaker

정원덕
selenium-korea
9 min readMay 4, 2019

--

Speaker: Peter Thomas

연설자인 Peter Thomas는 개발 생산성을 높여주는 소프트웨어를 만드는 회사인 Intuit에 재직중입니다. 이번 세션에서는 Selenium의 기본 토대인 WebDriver와 관련 기술들을 이야기 했습니다. 전체적인 아웃라인은 아래와 같습니다.

  1. What is the WebDriver?
  2. Architecture
  3. Example and Demos

Scope of this talk

Scope of this talk

이 세션은 WebDriver에 대해 다룹니다. WebDriver가 무엇일까요? W3C Specification에서는 “원격으로 웹을 제어하는 inteface 규약”이라고 설명하고 있습니다. Selenium은 WebDriver를 통해 브라우저를 제어합니다. 그리고 Selenium은 실제로는 3개의 제품을 가리키는 브랜드 이름입니다.

  1. Selenium Language Bindings (=Selenium WebDriver)
  2. Selenium IDE
  3. Selenium Grid

이 3개의 제품 모두 WebDriver를 사용하고 있습니다. 그리고 WebDriver의 정의를 살펴보면 재미있는 점을 찾을 수 있습니다.

  1. “WebDriver is a remote control interface”: REST API
  2. “that enables introspection and control of user agent”: like Web browser
  3. “It provides a platform and language-neutral wire protocol”: JSON over HTTP
  4. “as a way for out-of-process programs”: like Selenium
  5. “to remotely instruct the behavior of web browsers”: like Mobile and Desktop App

정의에 표현된 설명이 광범위하게 느껴지지만 실제로는 저희가 친숙하게 사용하는 기술혹은 도구들입니다.

Who did make W3C WebDriver Specification?

W3C WebDriver Specification은 누가 만들었을까요?

W3C Specification의 주요 편집자는 Simon Mavi Stewart, David Burns 입니다. 다음 링크로 Browser Testing and Tools Working Group을 확인해보실 수 있습니다.

WebDriver는 어떤 과정을 통해 동작할까요?

WebDriver가 실제로 어떻게 사용되는지 살펴보자

우리가 작성하는 Selenium 실행코드가 브라우저까지 어떻게 동작하게 되는지 과정을 나누어 살펴보겠습니다.

  1. Framework

테스트를 위해 작성하는 Selenium 코드를 실행하는 Test runner Framework을 의미합니다. Javascript라면 Mocha, Python은 Pytest, Ruby는 RSpec, Java는 JUnit을사용할 수 있습니다. Test runner Framework 자체의 성능이나 기능 차이는 크지 않습니다. 환경과 조건에 맞는 Framework을 선택하는 것이 중요하겠죠.

2. Bindings

이제 작성한 코드를 WebDriver가 이해할 수 있도록 바꿔줘야 합니다. Python, Ruby, Java의 경우, 우리가 Selenium이라고 부르는 프로그램이 언어별로 WebDriver가 이해할 수 있는 언어로 바꾸어 줍니다.(Javascript는 WebDriverIO 또는 NigthWatch.js) 이를 Language binding이라고합니다.

3. Driver

Selenium은 우리가 작성한 코드를 이해했습니다. 그럼 이것을 바로 브라우저로 보내서 사용자의 행동을 똑같이 따라할 수 있을까요? 하지만 브라우저는 Selenium이 보내는 명령을 이해하지 못합니다. 여기에 각 브라우저 벤더(제작사)가 제공하는 Driver가 필요합니다. Driver는 Selenium과 Browser를 연결하는 역할을 합니다. Chome은 chromedriver, Firefox는 geckodriver, Safari와 IE, Edge도 각각의 Driver가 있습니다. 드라이버는 구동되는 환경에 실제로 서버를 띄워서 REST API로 명령을 받아 수행합니다. 이 부분은 Selenium으로 작업을 진행할 때 눈에 띄지 않는 부분이라 쉽게 알아채기 어렵습니다. 세션 도중의 몇번에 Demo로 이 과정을 재현했는데요, 이해를 돕기 위해 관련 동영상을 함께 보시면 좋을 것 같습니다.

https://youtu.be/NuhoIZCDxb0

그리고 Driver는 session을 관리해서 실제 사용자가 로그인해서 만들어지는 session의 역할을 재현해볼 수 있습니다. Selenium에서 여러개의 탭을 열거나 새창을 열어서 요청을 보내도 서버는 여러분이 동일한 유저임을 알 수 있습니다.

4. Browser

우리가 작성한 Selenium 코드가 실제로 브라우저에서 실행되는 단계입니다. 마치 살아있는 사람이 브라우저를 다루듯 동작하는 모습을 보실 수 있습니다. Safari를 제외한 모든 브라우저는 자동화 처리 과정에도 수동으로 Inspector 창을 열거나 Network response/request를 확인하는 처리가 가능합니다.

Selenium, WebDriver 그리고 W3C까지의 흐름

The history: Selenium, WebDriver and W3C
  1. 2004년: Selenium 출시
  2. 2006년 6월: WebDriver 출시
  3. 2008년 9월: Selenium과 WebDriver가 합쳐짐
  4. 2011년: Selenium2 출시. W3C 명세(Specification) 작업시작
  5. 2016년: Selenium3 출시.
  6. 2018년: WebDriver가 W3C Recommendation으로 등록
WebDriver가 사용하는 API가 W3C표준이되었습니다

Demo를 통해서 WebDriver의 실제 동작을 알아봅시다!

cURL로 WebDriver를 제어해볼께요

https://youtu.be/cRaUuh-23ug

Deme: Karate API

W3C WebDriver 스펙으로 제어할 수 있는 것은 Selenium 뿐만이 아닙니다. 연설자인 Peter Thomas께서 재직중인 Intuit에서 만든 Karate API(Alpha)도 W3C WebDriver 스펙을따르고 있습니다. 그리고 Karate API는 API Testing, API Mocking, API Perfomance-Testing에 유용합니다. (여기서 제품 홍보가 들어가네요!)

Karate API는 W3C WebDriver를 지원합니다.하지만 아직 알파버전!

Karate API를 사용한 데모도 진행되었습니다.

Karate API로 WebBrowser 자동화테스트가 가능합니다
Karate API를 병렬로 수행하는 것도 가능합니다. 빠르군요!

Windows App도 테스트 자동화가 가능하다구요?

그렇습니다. Windows app들도 WebDriver가 있어서 Karate API로 제어할 수 있습니다. 데모 시연영상으로 확인하실 수 있습니다.

https://youtu.be/bs8egGofDO0

브라우저별 Driver는 어디있죠?

Driver들의 최신 버전은 아래 링크에서 확인하실 수 있습니다.

  1. Chrome:Chrome driver
  2. Firefox:geckodriver
  3. Safari:safaridriver(Mac/Legacy) & Safari technology preview
  4. MS Edge:MicrosoftWebDriver(Win 10)
  5. Windows Apps:WinAppDriver(Win 10)
  6. Internet Explorer:IEDriverServer(Win)

그 밖의 소식들

  1. Edge도 향후에는 Chromium 기반으로 바뀐다고 합니다. 그렇다면 WebDriver를 지원하게 될까요?

Selenium 4에서 기대할 수 있는 것들

  1. 안정적인 API (유일하게 W3C 스펙을 지원)
  2. Selenium Grid/Docker/Cloud
  3. 테스트의 관찰(Observability)과 추적(Tracing)이 강화
  4. 웹사이트와 문서화가 향상
  5. 엘리먼트를 찾는 Locator가 편리해짐 - “어떤 엘리먼트의 위나 혹은 오른쪽에 있는 걸 찾아줘” 라는 명령이 가능해짐
  6. Selenium IDE

짧은 소감

사용하고 있는 툴의 내부구조, 역사와 발전과정을 아는 것은 최고의 퍼포먼스를 내기 위해 반드시 필요한 과정이라고 생각합니다. 이번 세션은 그런 필요를 충분히 채워주었다고 생각됩니다. 유료 컨퍼런스에 자사 제품을 홍보하는 것은 의문이 들긴하지만, 테스팅툴의 선택의 폭을 넓혀준다는 점에서는 이해할 수 있겠습니다. W3C 명세에 WebDriver가 추가되면서 더 많은 브라우저와 Testing Framework이 Selenium과 호환되거나 혹은 Learning curve가 낮춰지면서 더 많은 문제를 해결할 수 있기를 기대해봅니다.

--

--

정원덕
selenium-korea

자비스앤빌런즈 프론트엔드 챕터장