尽管这个线程很老,但当前的selenium和firefox构建仍存在问题。我有很长一段时间一直收到这些非常烦人的信息,但没有好的解决方法。询问开发者/邮件列表/谷歌通常会得到以下答案:
“您应用程序中使用的javascript代码太大或存在错误,改进您的脚本将有所帮助。”
由于在一个大公司中没有这样的选择,当您依赖无法访问的框架时,我决定自己寻找根本原因。
问题的核心在于,如果指定了-timeout nnnn参数,selenium会覆盖配置文件设置。因此创建自定义firefox配置文件模板并设置dom.max_script_run_time和dom.max_chrome_script_run_time在这里不起作用。
一旦您指定了-timeout参数,这两个设置就会被覆盖为您提供给该参数的值。经过数小时的调试和测试,我注意到一些事实:
• 如果您不指定-timeout,则firefox运行30分钟,而没有一个脚本超时。之后,firefox会被selenium杀死,并出现SeleniumCommandTimedOutException。
• 一旦您指定了-timeout(无论哪个值),脚本超时就会在几秒钟或几分钟后出现。这些消息与超时值无关。
• -browserTimeout参数没有用处,因为我没有找到在源代码中使用此参数的位置。
由于我们有一些测试套件运行时间超过30分钟,因此我们有两种选择来解决此行为:
• 重写我们的测试套件并将它们分割以在30分钟窗口内运行
• 打补丁使selenium运行时间超过30分钟
不要使用-timeout参数。
所以自行选择哪个选项更好。我为HTMLLauncher.java创建了一个小而简单的补丁,以允许90分钟而不是默认的30分钟。
diff --git a/java/server/src/org/openqa/selenium/server/htmlrunner/HTMLLauncher.java b/java/server/src/org/openqa/selenium/server/htmlrunner/HTMLLauncher.java
index c2296a5..310b39f 100644
--- a/java/server/src/org/openqa/selenium/server/htmlrunner/HTMLLauncher.java
+++ b/java/server/src/org/openqa/selenium/server/htmlrunner/HTMLLauncher.java
@@ -146,6 +146,16 @@
launcher.launchHTMLSuite(suiteURL, browserURL);
sleepTight(timeoutInMs);
+ // SFR, Patch 2013-10-17: To get rid of the damn SeleniumCommandTimedOutException
+ // we allow the Suite to run 3 times as long as per default (30 min -> 90 min).
+ if(results == null) {
+ log.warning("SFR, Patch 2013-10-17");
+ sleepTight(timeoutInMs);
+ }
+ if(results == null) {
+ log.warning("SFR, Patch 2013-10-17");
+ sleepTight(timeoutInMs);
+ }
launcher.close();
如果需要,我会上传一个预编译的jar包,并附带上述补丁。