2012-07-24 2 views
2

최상위 레벨의 webdriver API는 페이지로드 이벤트 핸들러에 대한 액세스를 제공하지 않지만 REST 인터페이스를 통해 서버에 직접 명령을 보내는 것을 포함하여 모든 방법이 있습니다. 셀로드 서버에 직접 호출하여 페이지로드 블록 동작을 강제 실행 하시겠습니까? 엘리먼트 해킹을 기다리는 것에 대해서는 압니다 만 가능하다면 직접 소스로 가려고합니다. 특정 문제는 일부 백엔드 프로세스가 발생하는 동안 페이지에서 모달 대화 상자를 표시하는 버튼을 클릭 할 때 JS 호출을하는 페이지입니다. 그런 다음 백엔드 작업이 완료되면 브라우저를 새 페이지로 전달합니다. 클릭 동작은 새 페이지를 직접 트리거하지 않기 때문에 셀렌은 이벤트를 차단하지 않습니다. (어쨌든 모든 경우에이를 원하지 않습니다.)Selenium Webdriver에서 명시 적으로 페이지로드 차단을 실행합니다.

나는 유망한보고있는 명령에 대해 Command 클래스를 살펴 봤지만 아무 것도 보지 못했습니다. 내가 찾은 http://code.google.com/p/selenium/wiki/JsonWireProtocol하지만 도움이되지 않았다 ...

+0

것을 암시 대기 약을? –

답변

1

그게 까다로운 하나.

셀렌/webdriver에서 http 상태에 액세스하는 것은별로 편리하지 않습니다. 실용적인 방법을 권하고 싶습니다. IMO는 엘리먼트 접근 방식을 기다리는 것이 해킹이 아니라 적절한 방법이다. 귀하의 경우에는 selenium.getLocation() 또는 webdriver.getCurrentUrl() 기다리는 것이 예상 된 값을 포함합니다. 이 같은

뭔가 :

webDriverWait.until(new Function<WebDriver, WebElement>() { 
    @Override 
    public WebElement apply(WebDriver driver) { 
     //TODO: pass expected url as parameter 
     boolean expectedUrl = driver.getCurrentUrl().contains("your redirect url"); 
     if (expectedUrl) { 
      //If not null is returned, we have found something and waitUntil stops 
      return new RemoteWebElement(); 
     } 
     //try again 
     return null; 
    } 
}); 
+0

실제로 테스트 모듈에서 페이지로드 이벤트를 제어하기 위해 webdriver.execute에 직접 입력했기 때문에 wait 모듈을 사용할 수 없습니다 (최소한 심각한 수정 없이는). wait를 수정해야합니다. 페이지로드 특수 사례도 알고 있어야합니다. 내 자신의 대기 메서드를 쓴 webdriver (적절한 하위 클래스로 리팩터링 할 필요가 있지만 나중에 첨부) 및 URL 변경 기다리는 시도했지만 첨부 된 문제는 그 URL이 예상대로 않습니다 때문입니다. 페이지가로드되고 준비되었음을 의미합니다. 새로운 창을 다룰 때 이것은 더욱 문제가됩니다. –

관련 문제