2013-08-07 54 views
-1

我正在使用Java和Selenium來自動化一些測試用例。這涉及到加載帶有搜索結果的單個頁面並遍歷單個頁面上的每個100-1000個鏈接。將測試配置設置爲只檢查大約100個結果通常是可以的,但是任何高於此值的結果都會拋出NoSuchWindowException異常(WebDriverException的子類)。當我從父句柄切換到新打開的窗口句柄時,會發生這種情況。Java Selenium WebDriver - 無法找到窗口時正確的異常處理技術

我在do while循環中寫了一個try-catch語句來捕獲異常並重試該過程......但是,無論我嘗試什麼,Selenium都不會很好,並且我的代碼執行突然結束..: (下面是代碼:

boolean completed = false; 
    do{ 
     try{ 
      //click the search result 
      driver.findElement(By.xpath("my xpath string")).click(); 
      //switch to the new window 
      for(String winHandle: driver.getWindowHandles()){ 
       driver.switchTo().window(winHandle); 
      } 
      //for our test we need to save the source  
      source = driver.getPageSource(); 
      //close popup window and and switch back to the parent handle 
      driver.close(); 
      driver.switchTo().window(parentHandle); 
      completed = true; 
     }catch(WebDriverException ex){ 
      System.out.println("something went wrong while switching windows... retrying"); 
      driver.close(); 
      driver.switchTo().window(parentHandle); 
     } 
    }while(!completed); 

我已經嘗試了當一個異常被捕獲。例如,我試圖節省父網址,使用driver.quit(),然後嘗試重新啓動驅動器的各種方法。然而,然後Selenium抱怨我無法啓動Firefox驅動程序後調用driver.quit()...

任何想法如何更好地處理我的代碼的catch部分?

+1

異常從您的catch塊中拋出。你不抓住它,你的應用程序退出 – Tala

回答

0

好的,我發現解決方案得益於塔拉留下的評論。

我只是移除了catch塊下面的語句:

driver.close(); 
driver.switchTo().window(parentHandle); 

現在catch塊自身並不產生一個獨立的未捕獲的異常和循環正確它的工作原理重試以前的代碼...

相關問題