Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Javasript подвисает в Firefox


(Kovalev07) #1

Набор тестов выполняется на chrome и firefox.
Выполнение тестов занимало примерно одинаковое время в обоих браузерах. Примерно по 3 часа.

Тесты выполняются последовательно. (Можно запустить и параллельно но проблема в конткретных тестах)
Есть тесты где выполняется много js кода из webdriver (JavascriptExecutor) в таки тестах firefox начинает медленно работать. К примеру сейчас тесты в chrome выполнятся 4 часа в firefox 16 часов.
На веб сайте используется сторонняя библиотека (dhtmlx) у нее есть Js API поэтому использую javascript. webDriver.findElement(By… не подойдет.

Поведение firefox: выполняется 50 - 100 javscript запросов быстро.
следующий запрос может выполняться 10 - 50 секунд. потом опять 50 -100 запросов быстро и т.д.
в chrome такой проблемы нету.

Думаю проблема в конфигурации firefox. about:config
проблема наверное в памяти и сборщике мусора. зависания происходят с периодичностью.
могут через 30 секунд могут через минуту.


(Александр Таранков) #2

ты просто выговориться хотел или у тебя вопрос есть? Сформулируй почетче, может кто и поможет. Пока какой-то поток сознания…


(Kovalev07) #3

собственно вопрос. кто нибудь с таким сталкивался? как заставить firefox выполнять javascript без подвисаний?


(Сергей Блохин) #4

Профилировать Javascript пробовал? Нашёл узкое место? Можешь его показать нам? Пробовал его отдельно погонять в чистом Firefox и сравнивать с чистым Chrome?


(Дмитрий Жарий) #5

Без диагностики тут никак. Возможно, эта проблема спровоцирована утечками памяти (т.е. новый код инжектится настолько часто, что последствия старого не успевают очистится).

Для выяснения обстоятельств, нужно собрать дополнительные данные:

1.Вынесите весь механизм инжекта JavaScript в единый метод, например
ExecuteJs(string scriptName, string script)

В этом методе, считайте время выполнения скрипта и сохраните данные в лог.
Добавьте в лог имя скипта (scriptName), порядковый номер запуска и время выполнения.

2.Замеряйте используемую браузером память до и после запуска скрипта.

Проблемы могут быть спровоцированы как багами движка Firefox, так и неоптимальным кодом (который может входить в длинный цикл или случайно захватывать сумарно большой участок памяти)

Временное решение – перезапуск браузера после n-го количества тестов.


(Kovalev07) #6

Браузер перезапускается после каждого теста.
dzhariy
“Возможно, эта проблема спровоцирована утечками памяти (т.е. новый код инжектится настолько часто, что последствия старого не успевают очистится).”

Firefox не занимает более 300MB. Смотрю в направлении увеличения памяти для firefox.
Если проблему можно решить увеличением памяти до 600 - 900MB то это будет самый оптимальный вариант в
соотношение цена/время решение задачи


(Kovalev07) #7

Решил данную проблему путем уменьшения количества javascript запросов из selenium. собираю необходимые данные в массив и возвращаю все сразу вместо отдельных запросов. кол-во javascript запросов из selenum сократилось в 50 -100 раз. (задача была в получении данных из таблицы. раньше я возвращал значение каждой ячейки отдельно, теперь возвращаю массив значений сразу для всей колонки)
Проблема значит была не в firefox а именно в драйвере.