2012-08-12 5 views
3

다음 시나리오를 사용하고 있습니다.Selenium Webdriver C# 페이지가로드 될 때까지 기다리지 않고

페이지로 이동하고 싶습니다. 그런 다음 나타나는 즉시 버튼을 클릭하십시오 (페이지가로드 될 때까지 기다리지 않음). 오랜 시간이 걸리는 초기 페이지가로드되기를 기다리는 것을 원하지 않습니다. 내 프로그램은 현재 페이지가로드 될 때까지 멈추고 버튼을 클릭합니다.

기본적으로 링크로 이동 한 다음 페이지를 기다리지 않고 내 코드를 계속 수행하고 싶습니다.

어쨌든이 부분이 있습니까?

답변

0

짧은 답변 : 제

긴 대답 : 셀레늄은 시뮬레이션하기 위해 노력하고 기본적으로있는 실제 사용자 - 나는 좀 특히 후 배포 한 후 배포 할 배포를 테스트 할 필요가 시간에, 짜증 것을 알고있다 ...

그러나 : 버튼이 정말로 페이지에 첫번째의 사이 표시되면, 당신은 할 수 있습니다 실제 사용자가 버튼을 나타날 때까지 기다립니다하는 경우, 프로그램은 BTW ... 또한

을 할 수있다 사용해보기 :

ID, XPath는 ... 그런데 버튼의
  1. 검색 당신이 그것을 할
  2. 캐치 예외 오류가 발생한 경우 짧은 대기 시간,
  3. (I 어떻게 나 한테 물어 자바 놈, 그렇게 해달라고) (예를 들어, 200 밀리 초) 후, 1
  4. 그렇지 않은 경우로 이동 버튼
  5. 일정 시간이 (10 초를 통과하는 경우도 종료해야하는주기를 클릭) 만약 그렇다면, 위에서 언급 한 바와 같이 던져 예외

: 내가 선택한 언어는 Java입니다. 나는 그것을 할 수있다. 하지만 C#으로 쓰는 법을 모릅니다.

2
IWebDriver driver = new FirefoxDriver(); 
driver.Url = "http://somedomain/url_that_delays_loading"; 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement myDynamicElement = wait.Until<IWebElement>((d) => 
{ 
    return d.FindElement(By.Id("someDynamicElement")); 
}); 

원하는대로 정확하게 수행합니다. 요소를 찾도록 페이지를 쿼리하고 요소가 없으면 예외를 catch하고 발견되면 요소를 반환합니다.

그 후,이 페이지는 .NET 바인딩의 최신 버전

http://seleniumhq.org/docs/04_webdriver_advanced.html

3

로드되지 될 수 있다는 사실을 무시 버튼을 조작 할 수 있습니다, 당신은 페이지로드 시간 제한을 설정할 수 있습니다. 그러나주의해야 할 몇 가지주의 사항이 있습니다. 첫째, 모든 브라우저에서이 기능을 구현하지 않았습니다. 메모리가 작동하면 IE와 Firefox에서 작동합니다. 둘째, 제대로 작동하게하려면 예외를 잡아야하지만 완료 할 수 있습니다.

// WARNING! Completely untested code written without 
// the benefit of an IDE! 
IWebDriver driver = new InternetExplorerDriver(); 
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(1)); 

try 
{ 
    driver.Url = "http://your.long.loading.page.com"; 
} 
catch (TimeoutException) 
{ 
    // NOTE: In 2.26 or later, this will be WebDriverTimeoutException 
} 

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement element = wait.Until<IWebElement>((d) => 
{ 
    return d.FindElement(By.Id("yourId")); 
} 
관련 문제