【问题标题】:Selenium & Firefox: How can i turn off "Unresponsive script" warnings?Selenium 和 Firefox:如何关闭“无响应脚本”警告?
【发布时间】:2011-08-29 17:06:55
【问题描述】:

我在 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”,这应该完全禁用上述对话框。然而,我仍然得到对话。有什么办法可以防止出现警告对话框吗?

【问题讨论】:

    标签: firefox selenium


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,但是当 fxdriver 警告响起时,它已经设置为零。然后我将其设置为 20,但再次收到警告。我的印象是这些设置对 Selenium 没有影响,至少不像我使用它的方式(使用 WebDriverBackedSelenium 类)
    • (我知道这是一篇旧帖子)@Dave 你是在指着 Selenium 使用固定的、始终相同的 Firefox 配置文件吗?我认为默认情况下它每次运行时都会创建一个新的配置文件。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      虽然这个线程已经很老了,但当前的 selenium 和 firefox 版本仍然存在问题。很长一段时间以来,我都收到了这些非常烦人的消息,但没有很好的解决方法。询问开发者/邮件列表/谷歌通常会得到以下答案:

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

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

      问题的核心在于,如果您指定 -timeout nnnn 参数,selenium 会覆盖配置文件设置。因此,创建自定义 firefox 配置文件模板并设置 dom.max_script_run_timedom.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。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            更多细节在这里:

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

            【讨论】:

            • 我编辑了我的问题,表明该值已经是“0”(零),表明一切都应该被禁用。然而,那个警告仍然出现。认为这是一个 Selenium 错误,但不确定。
            【解决方案7】:

            当我在 Web 应用程序运行一些自己的蹩脚的慢速 JS 时进行 Selenium 调用时,会出现这个问题。即使我抓住弹出窗口并在几秒钟后重试,FF 也不再响应 Selenium。解决方案是在之前添加sleep 10,否则任何 Selenium 调用都会导致弹出窗口。

            【讨论】:

              猜你喜欢
              • 2016-10-18
              • 2013-09-30
              • 2015-05-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多