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

12

我在Mac 10.6.6上使用Firefox 5和Selenium Client 2.4.0。我正在使用WebBackedSeleniumDriver运行"selenium.getEval"命令,这会导致Firefox出现警告。

"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个回答

6

谢谢,但当fxdriver警告出现时,它已经被设置为零了。然后我将其设置为20,但仍然收到警告。我的印象是这些设置对Selenium没有影响,至少不是我使用的方式(使用WebDriverBackedSelenium类)。 - Dave
1
(我知道这是一篇旧帖子)@Dave,你是否指定Selenium使用固定的、始终相同的Firefox配置文件?我认为默认情况下它每次运行时都会创建一个新的配置文件。 - jakub.g

5
无论您在配置文件中设置了什么,Selenium在启动期间都将这两个值设置为2417483647,以尝试避免浏览器警告。然而,由于该值太大,FF最终会忽略它并使用默认值10/20。即使您将Selenium指向使用您的配置文件作为模板,情况也是如此。
我发现解决这个问题的最好方法是在Selenium服务器启动参数中指定-timeout nnnn。这将同时设置服务器和客户端(浏览器)超时值。

3
尽管这个线程很老,但当前的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包,并附带上述补丁。

2
在Firefox中输入about:config进入隐藏的配置页面。(确保你正在为selenium使用的配置文件执行此操作) 在“筛选器”框中,键入script_run_time。这将缩小选项范围,包括dom.max_script_run_timedom.max_chrome_script_run_time。右击它并选择修改。一个弹出框会出现。将数字更改为更大的数值,如40。这是脚本在Firefox认为它是“无响应”的情况下可以运行的最长时间。如果您在about:config页面中找不到该字符串,请右键单击任何位置,然后选择新建->整数,并输入名称和值(当被问及时)。

0

将其设置为一个非常大的数字,而不是"20"?


0

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

更多细节请参见此处:

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


1
我编辑了我的问题以表明该值已经是 "0" (零),表示应该禁用所有内容。然而,警告仍在出现。认为这可能是 Selenium 的 bug,但不确定。 - Dave

0

当网页应用程序在运行一些缓慢的JS时,我进行Selenium调用时会出现此问题。即使我捕获弹出窗口并在几秒钟后重试,Firefox对Selenium仍不响应。解决方案就是在任何Selenium调用之前加上sleep 10即可避免弹出窗口的出现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接