Фильтрация вызовов javascript XHR в selenium RC

У меня сумасшедшая проблема с приложением, которое я тестирую с помощью Selenium RC.

В конце страницы сценарий javascript делает несколько вызовов веб-службы аналитики, на ответ которой уходит буквально несколько минут.

Selenium ждет завершения этих вызовов, прежде чем перейти на новую страницу, хотя их ответ не связан с хорошим выполнением процесса. В конце концов, Selenium выдает исключение TimeOut (время ожидания установлено на 4 минуты)

Я использую selenium-RC 1.0.1 вместе с Firefox 3.5.16.

Во-первых, что я не могу сделать: - изменить приложение (у меня нет контроля над ним) - изменить мою версию Firefox (задействовано несколько производственных машин, и мне нужна эта версия) - с помощью WebDriver/Selenium 2 (по причине выше )

Я думаю, что блокировка вызовов javascript была бы полезной, но я не могу понять, как это сделать. - Я пытаюсь с помощью selenium.runScript и selenium.getEval установить для переменных javascript значение null, но когда они установлены, уже слишком поздно - я использую метод Gecko Object.watch, чтобы увидеть, когда значения изменены, но безуспешно

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

Или, возможно, можно распознать все активные XHR на странице и прервать их.

Я открыт для множества новых идей

Спасибо за чтение

Грувик


person Grooveek    schedule 06.05.2011    source источник


Ответы (1)


Сожалею, что изменить приложение невозможно — когда я столкнулся с похожей ситуацией (внешняя служба аналитики, вызываемая через ajax), я написал макет на JavaScript для службы, и у меня была версия моего приложения, в которой я запускаю модульные тесты. против использования макета. (В этом случае нас беспокоила не скорость загрузки страницы, а испорченные данные аналитики с помощью автоматических тестовых прогонов). правильные вызовы в библиотеке javascript сайта аналитики в нужное время.

В вашем случае я бы предложил написать небольшой HTTP-прокси (вы можете найти этот вопрос ответы полезны, хотя, если бы я это делал, я бы сделал это на Perl или Python, потому что это довольно быстро писать), который принимает запросы, направляемые на внешний сайт, и немедленно отвечает пустым документом или чем-то еще. уместно в вашей ситуации. (но обрабатывает все запросы, не направленные на сайт аналитики, как обычно)

Другими словами, не пытайтесь предотвратить выполнение javascript напрямую или путем фильтрации DOM, а просто перехватывайте медленные внешние запросы и быстро отвечайте. Я предлагаю это, потому что перехватить весь запрос значительно проще, чем фильтровать контент.

Затем, когда вы запускаете сервер selenium RC, укажите его на свой http-прокси в качестве вышестоящего прокси. Браузеры, запущенные сервером selenium, будут использовать RC-сервер в качестве своего прокси-сервера, а затем будут фильтровать все через ваш прокси-сервер.

При таком подходе вы фактически можете притвориться, что внешний сайт — это все, что вы хотите.

person Daniel Martin    schedule 06.05.2011
comment
Спасибо за ваш ответ ... Это могло бы помочь, но я должен был упомянуть об этом в моем НЕ МОЖЕТ СДЕЛАТЬ. Мы тестируем сотни разных веб-сайтов, и я бы не хотел мешать другим тестам работать только для одного сайта... Вот почему я говорил о решении с javascript. Я хотел бы что-то, что я могу сделать для каждого скрипта с той же конфигурацией Selenium. - person Grooveek; 06.05.2011