2014-05-15 1 views
6

java에서 HTMLUnitDriver를 사용하여 경고를 처리하고 싶습니다. firefox 드라이버를 사용하는 경고를 처리하기 위해 다음 코드를 사용하고 있으며 정상적으로 작동합니다.Java에서 HtmlUnitDriver를 사용하여 경고 처리

Alert alert = driver.switchTo().alert(); 
alert.accept(); 

하지만 HTMLUnitDriver 방법이 경고 상자를 처리하는

java.lang.UnsupportedOperationException: alert() 

같은 오류를주고있다?

답변

-1

HTMLUnitDriver에서 alert-API를 구현하라는 요청은 수년 전에 제기되었습니다. 이것은 링크입니다 :이 균열 다루기 어려운 것 같다으로

https://code.google.com/p/selenium/issues/detail?id=1105&q=alert%28%29&colspec=ID%20Stars%20Type%20Status%20Priority%20Milestone%20Owner%20Summary

, 당신은 자바 스크립트 (, ..., 경고 확인) 모달 대화 상자를 우회하는 몇 가지 트릭에 대해 생각해야합니다. 최소한 alert-API를 구현할 때까지.

모달 대화 상자가 표시되지 않도록하는 트릭은 Selenium 스크립트에 추가 JavaScript를 추가하는 것으로 구성됩니다. 예를 들어 콜백 함수를 변경하여 경고 상자를 피하십시오.

또한 JavaScript 자체를 사용하여 모달 대화 상자를 닫거나 취소하거나 확인하는 것은 불가능합니다. 그것이 당신이 그들을 막아야하는 이유입니다. 이는 보안상의 이유로 발생합니다.

경고 API가 구현 될 때까지는 HtmlUnitDriver를 사용하여 경고 API를 처리 할 수있는 유일한 방법입니다.

JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver; 
javascriptExecutor.executeScript("window.alert = function(message){ console.log(message); };" + 
    "window.confirm = function(message){ console.log(message); return true; };"); 

그런 다음 코드에서 HtmlUnitDriver.switchTo().alert().accept()를 건너 뛸 수 있습니다 : 당신이 경고가 실제로 표시할지 여부를 확인할 필요가없는 경우

0

, 내가 대신 메시지를 기록하는 자바 스크립트 alert() 메소드의 동작을 변경하는 것이 좋습니다 .

참고 : 페이지가 상호 작용하기 전에로드 할 수 있도록 셀레늄이 대기 때문에 경고가 초기 페이지로드에 나타나는 경우이 방법은 작동하지 않습니다. 따라서 위의 JavaScript는 너무 늦게 실행됩니다. HtmlUnitDriver 버전 2.25, HtmlUnitDriver.switchTo().alert().accept()는 더 이상 UnsupportedOperationException()을 던졌습니다의로


. 그러나 accept() appears to do nothing except confirm that the alert is present. 알림을 해제 할 수 없기 때문에 위의 방법을 사용하여 알림을 끄는 것이 아마도 가장 좋은/유일한 해결책 일 것입니다. HtmlUnitDriver으로 경고를 테스트해야하는 경우 두 가지 별도의 테스트가 필요합니다. 하나는 경고가 표시되는지 확인하는 테스트이고 다른 하나는 경고가 비활성화되었을 때 브라우저가 올바르게 작동하는지 확인하는 테스트입니다.


당신이 필사적으로 경고 나눠을 필요로하고 alert handling has been implemented in the master branch of HtmlUnitDriver, 소스에서 건물 괜찮합니다. 하지만 릴리스에 포함될시기는 확실하지 않습니다.