2013-04-29 91 views
1

我有一個硒測試,在應用程序上執行一組重複的操作,以測試在同一件事情完成很多次時發生的情況。這是通過無限循環完成的,因爲我實際上不需要通過/失敗,我只需要在2/4/8/24/48小時內看看它是否仍然存在。我遇到的問題是導致我的瀏覽器在夜間死亡。長時間運行硒測試 - 瀏覽器死亡

Driver info: driver.version: RemoteWebDriver 
[junit]  at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:493) 
[junit]  at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:244) 
[junit]  at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:77) 
[junit]  at wl12cStartServers.<method1>(<testname>.java:66) 
[junit]  at wl12cStartServers.<method2>(<testname>.java:34) 
[junit] Caused by: java.net.SocketTimeoutException: Read timed out 

這是因爲如果我是殺硒啓動的瀏覽器窗口中會出現同樣的錯誤,但我不知道是什麼原因造成它在這種情況下死.. 我見過的腳本運行幾個小時當我看着它..

+2

這可能聽起來很基本,但是您的計算機在夜間沒有進入睡眠模式或其他任何操作? – SpaceCowboy 2013-04-29 08:40:19

+1

我也得到了類似的東西,說實話,只要你把硒注視掉了就好了。 – Izzy 2013-04-29 09:00:47

+0

我意識到這也發生在我身上。瀏覽器就死了。有時候,在某個地方難以複製。唯一的解決方法就是不斷檢查瀏覽器是否仍然存在,如果沒有,請重新啓動它... – 2013-04-29 09:40:30

回答

0

正如用戶KPZ建議,問題可能是在測試過程中計算機進入睡眠模式(或任何類似的)。試試這個對策:

private static Timer screenSaverDisabler; 

/** Moves mouse once in a minute and therefore prevents the screen saver from kicking in. */ 
private static void disableScreenSaver() { 
    screenSaverDisabler = new Timer(); 
    screenSaverDisabler.scheduleAtFixedRate(new TimerTask() { 
     Robot r = null; 
     // initialization block 
     { 
      try { 
       r = new Robot(); 
      } catch (AWTException headlessEnvironmentException) { 
       screenSaverDisabler.cancel(); 
      } 
     } 
     @Override 
     public void run() { 
      Point loc = MouseInfo.getPointerInfo().getLocation(); 
      r.mouseMove(loc.x + 1, loc.y); 
      r.mouseMove(loc.x, loc.y); 
     } 
    }, 0, 59*1000); 
} 

此外,儘量不要忘記調用screenSaverDisabler.cancel();時,即可大功告成。


如果這沒有幫助,我不知道是什麼原因造成的問題。如果你不知道,有明顯的解決方案:

這是一個可恢復的例外!在主循環中添加一個try-catch塊,以解決此問題(捕獲任何RemoteWebdriverException並過濾掉那些不是由SocketTimeoutException引起的問題)並重新啓動瀏覽器。

+0

好主意,但在我的應用程序死亡的情況下會發生什麼?我認爲我會失敗,超時錯誤? – confusified 2013-04-29 14:44:27

+0

@ confusified我不知道我理解正確。您是否需要單個瀏覽器實例才能測試該應用程序?這意味着一旦瀏覽器死亡,你不能繼續在你結束的時候進行測試?噢,在這種情況下,我們需要確定瀏覽器崩潰的原因。 – 2013-04-29 14:53:36

+0

情景1 - 瀏覽器因不明原因而死亡,這意味着我的應用程序仍然有效。我的測試將在發現任何問題之前結束。如果瀏覽器在第5次迭代中死掉,並且我重新啓動測試,它將從第1次迭代開始,這會失敗,因爲第1次迭代沒有從上次運行中清除。這有任何意義嗎? 情景2 - 應用程序死亡。在這種情況下,一個錯誤可能會導致錯誤,並且硒會因斷言而結束,或者在最壞的情況下,由於在搜索某個元素時發生超時錯誤(如預期的那樣)。 – confusified 2013-04-29 15:47:37