硒和硒Firefox:如何关闭“无响应脚本”警告?

时间:2011-08-29 17:06:55

标签: firefox selenium

我在Mac 10.6.6上使用Selenium Client 2.4.0和Firefox 5.使用WebBackedSeleniumDriver,我正在运行一个导致Firefox警告的“selenium.getEval”命令,

"Warning: Unresponsive script.

A script on this page may be busy, or it may have stopped responding. You can stop the script now, or you can continue to see if the script will complete.

Script: resource://fxdriver/modules/utils.js:9161"

“dom.max_script_run_time”about:config的值为“0”,应该完全禁用上述对话框。然而,我仍然得到了对话。有没有办法阻止出现警告对话框?

7 个答案:

答案 0 :(得分:6)

dom.max_script_run_time是正确的偏好,但它仅适用于网页。浏览器UI(以及像fxdriver这样的扩展是其中的一部分)受首选项dom.max_chrome_script_run_time的限制(默认值为20秒)。你也应该把它设置为0。

文档:https://developer.mozilla.org/en/Preferences/Mozilla_preferences_for_uber-geeks#DOM_preferences

答案 1 :(得分:5)

无论您在配置文件中设置了什么,在启动期间,Selenium都会将这两个值设置为2417483647以尝试绕过浏览器警告。但是,因为该值太大,FF最终忽略它并使用默认值10/20。即使您指向Selenium使用您的个人资料作为模板,也是如此。

我发现解决这个问题的最佳方法是指定 -timeout nnnn

到Selenium Server启动args。这将设置服务器和客户端(浏览器)超时值。

答案 2 :(得分:3)

虽然这个线程很老,但当前的selenium和firefox构建仍然存在问题。我已经有很长时间的这些非常恼人的消息了,没有一个好的解决方案。询问devolopers / mailing list / google通常会得到以下答案:

  

你的应用程序中使用的javascript太胖或有缺陷,改进你的脚本会有所帮助。

由于这不是大公司的选择,当你依赖一个你无法访问的框架时,我决定为自己寻找根本原因。

问题的核心是,如果您指定-timeout nnnn参数,则selenium会覆盖配置文件设置。因此,创建自定义firefox配置文件模板并设置dom.max_script_run_timedom.max_chrome_script_run_time将不起作用。

只要指定-timeout参数,就会使用您为参数提供的值覆盖这两个设置。经过数小时的调试和测试,我发现了一些事实:

  • 如果您未指定-timeout,则firefox运行30分钟,没有一个脚本超时。之后,firefox被SeleniumCommandTimedOutException
  • 的selenium杀死
  • 只要指定-timeout(无论哪个值),脚本超时就会在几秒钟或几分钟后出现。这些消息与超时值无关。
  • -browserTimeout参数无效,因为我没有找到源中使用此参数的位置。

由于我们有一些运行时间超过30分钟的测试套件,我们有2个选项来解决此问题:

  • 重写我们的测试套件并将其拆分为在30分钟内运行
  • 修补硒运行时间超过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。

答案 3 :(得分:2)

在地址栏中输入 about:config ,在Firefox中隐藏配置页面。 (确保您对用于硒的配置文件执行此操作)在'过滤器'框,键入script_run_time。 这会将选项范围缩小为 dom.max_script_run_time dom.max_chrome_script_run_time 。右键单击它,然后选择“修改”。弹出一个框。将数字更改为大于40的数字。这是在Firefox认为脚本无法响应之前脚本可以运行的最长时间。如果在about:config页面中找不到该字符串,请通过右键单击任意位置创建该字符串,然后选择New->整数并输入名称和值(当被问到时)

答案 4 :(得分:0)

将它设置为一个非常大的数字而不是“20”?

答案 5 :(得分:0)

dom.max_script_run_time设置以秒为单位。将它从10改为20只会使等待的时间增加一倍。值为0将禁用它,但这可能会导致失控的脚本锁定您的浏览器。你可能只是使用一个非常大的值。

此处有更多详情:

http://kb.mozillazine.org/Dom.max_script_run_time

答案 6 :(得分:0)

当我在执行Selenium调用时,Web应用程序正在运行一些自己糟糕的JS,这个问题对我来说很明显。即使我抓住弹出窗口并在几秒钟后重试,FF也不再对Selenium做出响应。解决方案是在{strong>任何任何 Selenium调用导致弹出窗口之前放置styles