2014-01-19 2 views
6

테스트를 만들고 문제가 발생했습니다. 다음은 시나리오입니다. Selenium Web 드라이버를 사용하여 Page1에 양식을 작성하고 단추를 클릭하여 양식을 제출하십시오. Page2가로드되기 시작합니다.하지만 문제는 페이지 2가 Google 웹 로그 분석 코드를 사용하며 때로는 페이지로드가 중단되는 데 영원히 걸립니다.Selenium Webdriver 중지 원하는 요소가 이미로드 된 경우 페이지를로드 하시겠습니까?

예상되는 요소가 이미 있지만 Selenium 웹 드라이버는 전체 웹 페이지가 완전히로드 될 때까지 진행되지 않습니다.

Selenium을 다음 작업으로 이동 시키거나 예상되는 요소가 이미있는 경우 외부 javascript/css로드를 중단하려면 어떻게해야합니까?

다음 설정을 조정 해 보았습니다. 그러나 운이 없었습니다.

driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS); 
driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS); 
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

일시적인 해결책 : 답변을 찾으려면 아래로 스크롤하십시오!

답변

4

다음과 같은 접근을 시도하십시오. 빈센트 부비에서 아래의 코드에서와 같이

((JavascriptExecutor) driver).executeScript("return window.stop"); 

driver.findElement(By.tagName("body")).sendKeys("Keys.ESCAPE"); 

또는

는 다른 방법으로, 당신은 또한 WebDriverBackedSelenium을 사용할 수 있습니다.

//When creating a new browser: 
WebDriver driver = _initBrowser(); //Just returns firefox WebDriver 
WebDriverBackedSelenium backedSelenuium = 
      new WebDriverBackedSelenium(driver,"about:blank");  

//This code has to be put where a TimeOut is detected 
//I use ExecutorService and Future<?> Object 

void onTimeOut() 
{ 
    backedSelenuium.runScript("window.stop();"); 
} 

출처 : https://sqa.stackexchange.com/a/6355

출처 : https://stackoverflow.com/a/13749867/330325 당신이 요소에 대해 확인하고 당신이 존재 함을 알게되면

+0

나는 그에게 기회를 준하지만 동일한 문제가 남아있다. JavascriptExecutor 또는 WebDriver에 의해 단추를 클릭하는지에 관계없이 Page2가로드되기 시작합니다. 그러나 Page2가 완전히로드되지 않았기 때문에 pagetimeout 오류가 발생하거나 다음 명령문으로 이동하지 않습니다 (예상되는 elm이 Page2에 있는지 확인하는 것입니다). Page2에는 요소가 있습니다. 셀레늄은 페이지가 완전히로드 된 후에 계속해서 진행해야합니다. – roosevelt

+0

FYI, 나는 try/catch를 시도해도 selemium 명령을 실행할 수 있는지 알아보기 위해 pagetimeout 예외를 잡았지만 명령을 실행하지는 않습니다. ( – roosevelt

0

, 당신은 /로 이동 할 수 중 다음 경우 (다른 페이지를로드 작업이 다른 페이지에있는 경우) 또는 작업이 동일한 페이지에있는 경우 (아직로드되지 않은 요소가 필요하지 않으므로) 평소와 같이 계속할 수 있습니다. 셀레늄은 이미로드 된 요소를 식별합니다. 기능이 풍부한 페이지로 작업 할 때이 기능이 작동합니다.

0

webdriver()를 사용하여 양식을 제출하는 대신 jsexecutor를 사용하고 클릭하십시오. Jsexecutor는 페이지로드를 기다리지 않고 다른 작업을 수행 할 수 있습니다.

+0

'((JavascriptExecutor) getDriver()). executeScript ("document 페이지 2는 이미로드 된 항목을 가지고 있지만 페이지가 완전히로드되지 않았기 때문에 Selenium은 다음 명령을 실행하지 않습니다' getDriver(). findElement (by.id ("elm-waiting-for")). isDisplayed()' – roosevelt

5

그래서 나는이 문제에 대해 셀렌에게보고했다. 임시 해결 방법은 Firefox의 제한 시간 설정을 망쳐 놓는 것입니다. 근본적으로 기본적으로 파이어 폭스는 당신을 타이밍 내기 전에 각 연결에 대해 약 250 초를 기다린다. config : 세부 정보를 확인할 수 있습니다. 기본적으로 저는 Firefox를 너무 오랫동안 기다리지 않기 때문에 크랭크였습니다. 그리고 페이지가 이미로드가 끝난 것처럼 Selenium은 계속 진행할 수 있습니다 : P.

다른 브라우저에도 비슷한 설정이있을 수 있습니다. 나는 여전히 Selenium이 우리에게 pagetimeout 예외를 처리시켜야한다고 생각한다. 여기에 버그에 별표를 추가하십시오 : http://code.google.com/p/selenium/issues/detail?id=6867&sort=-id&colspec=ID%20Stars%20Type%20Status%20Priority%20Milestone%20Owner%20Summary, 그래서 셀렌은 이러한 문제를 수정합니다.

FirefoxBinary firefox = new FirefoxBinary(new File("/path/to/firefox.exe")); 
FirefoxProfile customProfile = new FirefoxProfile(); 
customProfile.setAcceptUntrustedCertificates(true); 
customProfile.setPreference("network.http.connection-timeout", 10); 
customProfile.setPreference("network.http.connection-retry-timeout", 10); 

driver = new FirefoxDriver(firefox, customProfile); 
driver.manage().deleteAllCookies(); 
-1

위의 시나리오에서 설명한대로 첫 페이지에서 아래의 wait 명령을 사용하는 것이 가장 좋습니다.

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id(>someid>))); 

첫 번째 페이지에서 필수 요소가 발견되면 두 번째 페이지로 이동할 수 있습니다.

-1

위의 시나리오에서 설명한대로 첫 페이지에서 아래의 wait 명령을 사용하는 것이 가장 좋습니다.

WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = 
     wait.until(ExpectedConditions.presenceOfElementLocated(By.id(>someid>))); 

첫 번째 페이지에서 필수 요소가 발견되면 두 번째 페이지로 이동할 수 있습니다. 명시 적 사용은/대기 webdriver

-2

는 ----

WebDriverWait wt=new WebDriverWait(driver, 20); 
    wt.until(ExpectedConditions.elementToBeClickable(By.name("abc"))); 
+0

이 해결책은 묻는 질문과는 관련이 없습니다. – Vaibhav

관련 문제