Подтвердить что ты не робот

Selenium & Firefox: Как я могу отключить предупреждения "Невосприимчивые script"?

Я использую Selenium Client 2.4.0 на Mac 10.6.6 с Firefox 5. Используя 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", что должно полностью отключить указанный выше диалог. Тем не менее, я все еще получаю диалог. Есть ли способ предотвратить появление диалогового окна предупреждения?

4b9b3361

Ответ 1

dom.max_script_run_time - это правильное предпочтение, но оно применимо только к веб-страницам. Интерфейс браузера (и расширения, такие как fxdriver, являются его частью) ограничены предпочтением dom.max_chrome_script_run_time, однако (значение по умолчанию - 20 секунд). Вы также должны установить его на 0.

Документация: https://developer.mozilla.org/en/Preferences/Mozilla_preferences_for_uber-geeks#DOM_preferences

Ответ 2

Независимо от того, что вы настроили в своем профиле, во время запуска Selenium устанавливает оба значения в 2417483647, чтобы попытаться обойти предупреждение браузера. Однако, поскольку значение настолько велико, FF перестает игнорировать его и вместо этого использует значение по умолчанию 10/20. Это верно, даже если вы указываете, что Selenium использует ваш профиль в качестве шаблона.

Лучший способ найти это - указать -timeout nnnn

для аргументов запуска сервера Selenium. Это устанавливает значения времени ожидания сервера и клиента (браузера).

Ответ 3

Хотя этот поток довольно старый, проблема по-прежнему существует в текущих сборниках селена и firefox. У меня эти очень раздражающие сообщения довольно долгое время, без особых проблем. Когда вы спрашиваете у devolopers/mailing list/google, обычно возникает следующий ответ:

Javascript, используемый в вашем приложении, слишком толстый или плохой, что улучшит ваши скрипты.

Поскольку это не вариант в более крупной компании, когда вы зависите от структуры, к которой у вас нет доступа, я решил найти причину для себя.

Сердцем проблемы является тот факт, что селен переопределяет настройки профиля, если вы указываете параметр -timeout nnnn. Поэтому создание настраиваемого шаблона профиля Firefox и установка dom.max_script_run_time и dom.max_chrome_script_run_time здесь не будут работать.

Как только вы укажете параметр -timeout, эти две настройки будут переопределены значением, которое вы предоставили параметру. После нескольких часов отладки и тестирования я заметил некоторые факты:

  • Если вы не укажете -timeout, firefox будет работать в течение 30 минут без одного таймаута script. После этого firefox убивает селен с помощью SeleniumCommandTimedOutException
  • Как только вы укажете -timeout (независимо от того, какое значение), таймаут script появится через несколько секунд или минут. Эти сообщения не зависят от значения тайм-аута.
  • Параметр -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();

Я загружу предварительно скомпилированную банку с вышеуказанным патчем, если это необходимо.

Ответ 4

Перейдите на страницу скрытой конфигурации в Firefox, набрав about: config в адресной строке. (убедитесь, что вы делаете это для профиля, который вы используете для селена). В поле "Фильтр" введите script_run_time. Это уменьшит параметры dom.max_script_run_time и dom.max_chrome_script_run_time. Щелкните его правой кнопкой мыши и выберите "Изменить". Появится окно. Измените число на большее, чем 40. Это максимальное время, когда script может запускаться до того, как Firefox считает, что он "не отвечает". Если вы не можете найти строку на странице about: config, создайте ее, щелкнув правой кнопкой мыши в любом месте, а затем выберите New- > Integer и введите там имя и значения (если задано)

Ответ 5

Задайте его для очень большого числа вместо "20"?

Ответ 6

Параметр dom.max_script_run_time находится в секундах. Изменение его с 10 до 20 просто удваивает время ожидания. Значение 0 отключит его, но это может привести к блокировке script блокировки вашего браузера. Вы можете просто использовать действительно большое значение.

Подробнее здесь:

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

Ответ 7

Эта проблема возникает для меня, когда я звоню на Selenium, пока веб-приложение запускает собственный дрянной медленный JS. Даже если я поймаю всплывающее окно и повторю попытку через несколько секунд, FF больше не реагирует на Selenium. Решение состоит в том, чтобы просто положить sleep 10, иначе иначе любой вызов Selenium приведет к всплыванию.