Автоматизация браузера - добавьте JavaScript на страницы и дождитесь завершения задачи - PullRequest
1 голос
/ 29 ноября 2011

У меня ужасная задача ввода данных, требующая автоматизации. Проблема в том, что некоторые процессы основаны на веб-службах Ajax, которые не имеют API.

Проблема с iMacros (или любым другим инструментом автоматизации) заключается в том, что всякий раз, когда макрос внедряет javascript в страницу (изменяя обратные вызовы ajax и делая все, что ему нужно), дочерний сценарий не имеет возможности уведомить родительский сценарий о том, что задача готова, и пусть она продолжит процесс в одном потоке. Если я использую инструкцию WAIT, надежность будет нулевой, и нет способа реализовать отказоустойчивость.

Я пробовал все, что мог придумать, включая расширения Chrome, снижение безопасности браузера XSS и даже репликацию запросов через cURL и PHP. У каждого из них есть свои ограничения.

Я открыт для любого решения, которое:

  • может дождаться окончания загрузки страницы (события загрузки)
  • может изменять JavaScript на этой конкретной странице, взаимодействовать с переменными и т. Д.
  • может уведомить родительский вызывающий объект о том, что подзадачи выполнены, и запустить соответствующие события
  • поддерживает вспышку

Любая альтернатива и помощь высоко ценится.

1 Ответ

1 голос
/ 29 ноября 2011

Вот хорошая статья, посвященная Selenium, объясняющая различные способы ожидания завершения запросов ajax: http://agilesoftwaretesting.com/?p=111.

Это намного чище, чем пытаться модифицировать существующий JS. Любое из следующего может быть вызвано непосредственно из javascript, поэтому, если ваша платформа автоматизации поддерживает вызов javascript (что делает Selenium / webdriver), вы просто вызываете эти функции, в зависимости от того, какие библиотеки ajax используются на вашем веб-сайте:

jQuery: «jQuery.active»

Прототип: «Ajax.activeRequestCount»

Dojo: «dojo.io.XMLHTTPTransport.inFlight.length»

Просто убедитесь, что значение равно 0, а затем продолжите.

...