我有一个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启动的浏览器窗口,但是我不知道是什么导致它在这个实例中死亡。 我看到脚本运行了几个小时,我正在观看它..
答案 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
引起的)并重新启动浏览器。