Можно ли заполнить форму Ajax программно? - PullRequest
1 голос
/ 29 апреля 2009

Я делаю некоторую работу по автоматизации и могу обойти сайт и нормально публиковать в HTML-формы, но теперь я столкнулся с новым вызовом, Ajax форм.

Поскольку источника для чтения нет, мне остается только задаться вопросом, можно ли прогаматически заполнить форму Ajax в C #. В настоящее время я использую невидимый axWebBrowser.

Заранее спасибо за помощь!

Ответы [ 2 ]

6 голосов
/ 29 апреля 2009

Да, но я рекомендую использовать другой подход для запроса / ответа на страницах сервера, включая обычные страницы и страницы обработчика AJAX.

В c # попробуйте использовать WebRequest / WebResponse или более специализированные классы HttpWebRequest / HttpWebResponse.

Ajax - это не более чем «причудливое» имя для технологии, которая позволяет Javascript отправлять HTTP-запросы серверу, который обычно реализует некоторые обработчики, которые создают специализированное, легковесное содержимое для вызывающей стороны Javascript (обычно кодируется как JSON).

Поэтому, чтобы имитировать вызовы AJAX, все, что вам нужно сделать, - это проверить ваше целевое приложение (веб-страницу, на которую вы хотите «опубликовать») и посмотреть, какой формат используется для связи AJAX, - затем скопировать Javascript страницы. поведение из C # с использованием классов WebREquest / WebResponse.

См. Firebug - отличный инструмент, который позволяет вам просматривать веб-страницу, чтобы определить, какие вызовы она делает, на какие страницы и что эти страницы отвечают. Он также неплохо справляется с проверкой AJAX-вызовов.

Вот очень простой пример того, как сделать веб-запрос:

HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create("http://www.mysite.com");

using (HttpWebResponse resp = (HttpWebResponse)wReq.GetResponse())
{
   // NOTE: A better approach would be to use the encoding returned by the server in
   // the Response headers (I'm using UTF 8 for brevity)
   using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
   {
       string content = sr.ReadToEnd();
       // Do something with the content
   }
}    

POST - это также запрос, но с другим методом. См. эту страницу для примера того, как сделать очень простую запись.

EDIT - Подробная информация о проверке поведения страницы с помощью Firebug

Под проверкой страницы, которую вы пытаетесь воспроизвести, я имею в виду использование инструмента (я использую Firebug - в Firefox) для определения потока информации между страницей и сервером.

С помощью Firebug вы можете сделать это с помощью панелей «Сеть» и «Консоль». Панель Net отображает все запросы, выполненные браузером при загрузке страницы. В то время как «Консоль» будет перечислять связи между страницей и сервером, которые происходят после загрузки страницы. Те коммуникации, которые происходят после загрузки страницы, по сути, являются вызовами AJAX, которые вы хотите реплицировать (Примечание: для работы сети необходимо включить мониторинг сети в Firebug)

Ознакомьтесь с Учебное пособие Michael Sync , чтобы узнать больше о Firebug и поэкспериментировать с панелью консоли, чтобы узнать больше о запросах AJAX.

Относительно «репликации поведения страницы из C # с использованием WebRequest / WebResponse» - вы должны понимать, что, как я уже говорил ранее, вызов AJAX Javascript - это не что иное, как HTTP-запрос. Это HTTP-запрос, который Javacript отправляет веб-серверу «за кулисами» или вне его. Чтобы повторить это, это на самом деле ничем не отличается от репликации обычного GET или обычного POST, как я показал выше. И вот тут в игру вступает Firebug. Используя его, вы можете просматривать запросы так, как это делает Javascript, - посмотрите на панель консоли и посмотрите, как выглядит сообщение запроса.

Тогда вы можете использовать ту же технику, что и выше, используя HttpWebRequest / HttpWebResponse, чтобы сделать тот же тип запроса, что и Javascript, только вместо этого делать это из C #.

Грегг, надеюсь, это немного прояснит мой ответ, но помимо этого я предлагаю поиграть в Firebug и, возможно, узнать больше о том, как работает протокол HTTP и как AJAX работает как технология.

1 голос
/ 29 апреля 2009

Вы смотрели на использование Selenium. AFAIK, вы можете написать тестовые примеры на C #, и я знаю, что наши тестировщики успешно использовали его до того, как пользовательский интерфейс протестировал сайт ASP.NET с поддержкой Ajax

http://seleniumhq.org/

...