Фильтрация javascript XHR-вызовов в селене RC - PullRequest
1 голос
/ 06 мая 2011

У меня безумная проблема с приложением, которое я тестирую с 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, но уже слишком поздно, когда они установлены - Я использую метод Object.watch Gecko, чтобы увидеть, когда значения изменяются, но безуспешно

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

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

Я открыт для новых идей

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

Grooveek

1 Ответ

3 голосов
/ 06 мая 2011

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

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

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

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

При таком подходе вы в основном получаете вид, что внешний сайт - это то, что вы хотите.

...