长期运行的硒测试 - 浏览器死亡

时间:2013-04-29 08:23:51

标签: java selenium webdriver

我有一个selenium测试,它在一个应用程序上执行一系列重复操作,以准确测试在同一件事情多次完成时会发生什么。这是通过无限循环完成的,因为我实际上并不需要通过/失败,我只需要看看它是否仍然存在于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

这是一个错误,如果我要杀死由selenium启动的浏览器窗口,但是我不知道是什么导致它在这个实例中死亡。 我看到脚本运行了几个小时,我正在观看它..

1 个答案:

答案 0 :(得分: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引起的)并重新启动浏览器。