2017-11-24 1 views
0

테스트 할 페이지입니다. 속도가 느린 네트워크 (또는 인터넷 검열, 일부 리소스로드가 실패 할 수밖에 있음)로 인해 영원히로드됩니다. 그러나 페이지 요소의 대부분은 1 초 내에 존재합니다.Selenium : 무한하게로드 된 탐색 페이지에 pageLoadTimeout()을 구현하는 방법

Selenium은 페이지가 완전히로드 될 때까지 요소가 클릭되지 않으므로 pageLoadTimeout()을 사용하여 5 초 후에 페이지로드를 중단 한 다음 시간 제한을 처리하고 페이지에서 작업을 수행하려고합니다. 그리고 코드는 get (url)에 지정된 페이지에서 작동합니다.

try { 
     driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS); 
     driver.get(url); 
    } 
    catch (TimeoutException e){ 
    } 
    finally { 
     driver.findElement(By.xpath("xpath here")).click(); 
    } 

그러나 링크를 클릭하여 새 페이지로 이동하려는 경우에는 작동하지 않습니다. 당신은 위의 코드를이 새 페이지의 시간 제한 예외를 처리하지 않았기 때문에 곧

org.openqa.selenium.TimeoutException에게

을 얻을 것입니다. 그런 다음이 새로운 페이지가 무한히로드되지 않도록 try-catch-finally를 추가해야합니다. 실제로 테스트 할 페이지에 도달하기 전에 연결해야하는 링크가 많으면이 작업이 더 까다로워 질 것입니다.

누구에게도 해결책이 있습니까?

+0

[Selenium에서 pageLoadTimeout이 작동하지 않을 수 있습니다] (https://stackoverflow.com/questions/45591282/pageloadtimeout-in-selenium-not-working) – DebanjanB

+0

나는 왜 잡으려고 노력해야하는지에 대한 논리를 이해하지 못합니다. 예외가 처음에'PageLoading'이 실패했을 때? – DebanjanB

+0

안녕하십니까 @DebanjanB, 나는 pageLoadTimeout()을 사용하여 5 초 후에 페이지를로드하지 못하도록합니다. – Jacob

답변

0

스크립트에 pageLoadTimeout이 추가되면 WebDriver 인스턴스는 예외를 throw하기 전에 모든 페이지가로드 될 때까지 5 초 동안 기다립니다. 페이지가 5 초 내에로드되지 않으면 런타임에 TimeOutException을 발생시킵니다.

제한 시간을 늘려보십시오.

+0

감사합니다. 하지만 내 의도는 pageLoadTimeout()을 사용하여 페이지가 영원히로드되지 않도록하는 것입니다. 내 상황을 자세히 설명하기 위해 설명의 시작 부분을 업데이트했습니다. – Jacob

+0

귀하의 설명을 근거로, 귀하는 페이지에서 이미 기다리고 있던 요소가 이미로드되어 있기 때문에 전체 페이지가로드 될 때까지 기다리지 않으려한다는 것을 이해합니다. 따라서 여기에서 explicitWait을 사용하여 요소를 기다렸다가 의도 한 동작을 수행해야합니다. 시간 초과 오류가 발생하는 다음 페이지에서도 동일하게 적용됩니다. 관심있는 요소를 기다리십시오. –

+0

explicitWait()을 시도했지만 작동하지 않습니다. 페이지가 완전히로드되지 않았으므로 코드가 driver.get (url)에 멈추었습니다. 그 이후의 코드는 실행되지 않습니다. – Jacob

0

5 초 후에 페이지 로딩을 중지하는 방법이 효과적이지 않습니다.
WebDriver는 의도적으로 전체 페이지로드를 기다립니다. 많은 ajaxifed 웹 페이지들은 어렴풋이 onload 이벤트를 사용하여 전체 페이지가로드 된 직후에 의 일부 자바 스크립트 코드를 실행합니다.. 이 자바 스크립트 코드는 일반적으로 페이지를 사용할 준비를하는 몇 가지 작업을 수행합니다.

전체 페이지가로드 될 때까지 기다리지 않고이 페이지에서 클릭하거나 데이터를 입력하기 시작하면 테스트가 작동하지 않을 가능성이 높습니다. 일부 필드는 아직 편집 할 수 없으며 버튼이나 링크를 클릭 할 수 있습니다. 작동하지 않습니다.

WebDriver는 이러한 오류를 방지하려고 노력하며 대부분 데이터를 클릭하고 쓰는 등의 메서드는 전체 페이지가 기본적으로로드되기를 기다리고 있습니다.

+0

감사합니다. 그러나 인터넷 검열로 인해 전체 페이지로드가 발생하지는 않습니다. 따라서 대개 5 초 정도면 대부분의 페이지를로드하기에 충분합니다 (검열 된 리소스 제외). 페이지를 완전히로드 할 수는 없지만이 페이지에서 테스트중인 기능에는 영향을 미치지 않습니다. 그리고 위의 코드는 첫 번째 페이지에서 트릭을 수행 할 수 있습니다. 새로운 페이지에 대한 링크를 찾을 방법이 필요합니다. – Jacob

관련 문제