반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함


Why using JavascriptExecutor in WebDriver can be dangerous


나는 자주 JavascriptExecutor를 사용해서 자바스크립트를 running 하라는 권고를 듣는다. 예를 들어 개발자 컴퓨터에서는 pass를 하는데 functional test machine에서는 fail을 하는 테스트를 어느 프로젝트에서 본 적이 있다. 그 코드는 아래와 같았다.

driver.findElement(By.cssSelector(".save")).click();

그래서 개발자는 아래와 같이 이 코드를 고쳤다.

((JavascriptExecutor)driver).executeScript("$('.save').click();");


  이 코드는 제대로 작동 했다.




추측컨대 웹 드라이버는 style="display: none;" 과 함께 DOM안에 항상 존재하는 버튼을 찾게 된다. 하지만 버튼이 visible 될때까지 기다리지 않기 때문에 이 버튼 click은 fail이 되게 된다.


실제로 이 테스트는 아래와 같다.


- open the dialog (dialog 를 연다)
- wait for the button to become visible (버튼이 visible 할 때까지 기다린다)
- click the button (버튼을 클릭한다)

만약에 우리가 자바스크립트를 사용했다면 버튼이 visible 할 때까지 기다릴 필요가 없다. 그러니까 자바스크립트가 더 빠르고 제대로 동작하게 된다.

뭐 제대로 작동하니까 문제가 없을까? 그렇지 않다. 이 save 버튼이 scroll 하지 않는 javascript dialog 에 있게 된다. 만약 페이지가 scroll up이나 down을 하게 되도 이 dialog 는 그대로 남게 된다. 이 dialog는 항상 위에서부터 120px 거리에 있다. 이 테스트가 돌아갈 때 dialog 830px hige에 데이터를 생성하게 된다. 이것은 아래에서 950px에 놓이게 된다. 개발자의 machine은 1600X1200 해상도 이다. 이 해상도에서는 이 dialog가 완전히 다 보이게 된다. functional test machine은 해상도가 800X600 이다. 이렇게 되면 이 dialog의 밑부분이 보이지 않게 된다. 브라우저가 full screen이어도 이 save button을 볼 수 없게 되는 것이다.


그래서 개발자 machine에서 WebDriver는 보여서 이 save 버튼을 click 하게 된다. functional test machine 에서는 visible 하지 않고 이것을 scroll 할 수도 없기 때문에 save button이 보이지 않게 된다. 그래서 click이 안 되게 된다.

자바스크립트를 보이든 보이지 않든 상관없이 버튼이 click될 수 있도록 바꾸면 functional test machine에서는 pass가 되더라도 800X600 을 사용하는 사람들은 이 버튼을 클릭할 수 없게 된다.

이런 경우 자바스크립트를 사용하면 실제 requirement의 상황에 정확하게 일치하는 테스트가 되지 않을 수도 있고 이런 경우는 여러분의 tests report를 false가 되도록 해야 한다.


반응형

Comment