2014-10-29 2 views
-2

저는 Firefox 드라이버를 사용하여 Selenium 2.0에서 자동화 된 테스트를 작성하고 있습니다. 사이트는 javascript 함수를 트리거하는 'data-val-method-to-execute'속성이있는 'input'태그와 같이 많은 바인딩을 사용합니다.자바 스크립트가로드되기 전에 Selenium Webdriver가 요소를 클릭합니다.

드라이버가 해당 자바 스크립트 기능이로드되기 전에 요소를 클릭하기 때문에 무작위로 테스트의 약 10 %가 실패하므로 아무 일도 일어나지 않습니다.

한 가지 해결책은 Thread.Sleep 일 수 있습니다. 문제는 다음과 같습니다. 모든 테스트 (많은 작업)에서 구현해야합니다. 그들은 테스트를 크게 늦추고 시간이 문제가됩니다. 1 초의 잠과 간단한 드롭 다운이 항상 작동하지는 않습니다. (그래서 타임 아웃을 늘려야합니다)

+0

'WebdriverWait' 클래스와 함께'ExpectedConditions' 클래스를 사용하고 있습니까? –

+0

드라이버가 요소를 성공적으로 찾았 기 때문에 ExpectedConditions를 사용하지 않습니다. –

답변

0

페이지가 준비 될 때까지 Selenium을 기다리는 방법을 찾아야합니다. 이를 위해 "한 가지 크기가 모두 적합"해법은 없습니다. 그것은 당신이하는 일에 달려 있습니다.

일부 복잡한 AJAX/JavaScript의 경우 phantomjs를 사용하고 개방형/활성 네트워크 연결 수를 계산하는 코드를 추가해야했습니다. 테스트는 숫자가 바뀔 때까지 기다렸다가 (즉, AJAX 요청이 전송되었음을 알게 됨) 활성 연결 수가 0이 될 때까지 대기합니다 (AJAX가 완료되었음을 알았습니다).

또는 "모든 스크립트가 완료되었습니다."라는 테스트 페이지에 숨겨진 DIV를 추가하십시오. DIV가 나타날 때까지 기다립니다. 여기서 문제는 AJAX 핸들러가 DIV를 생성하는지 확인하는 것입니다.

코드를 오염시키지 않으려면 함수를 덮어 쓰는 테스트를 실행할 때 DIV를 만드는 빈 함수를 사용하고 머리에 <script> 요소를 추가로 삽입하십시오.

+0

답장을 보내 주신 Aaron에게 감사드립니다. 숨겨진 DIV 솔루션을 구현하고 몇 가지 테스트를 해 드리겠습니다. AJAX 요청에 대해서는 요청이 완료된 후 특정 요소에 대해 webdriver와 대기 할 수 있기 때문에 문제가되지 않습니다. 나는 그것이 미래에 편리하게 올 것이라고 확신한다. –

관련 문제