虽然这个线程已经很老了,但当前的 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 分钟的测试套件,我们有 2 个选项来解决此问题:
- 重写我们的测试套件并将它们拆分为在 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。