Можно ли заполнить форму Ajax программно?
Я делаю некоторую работу по автоматизации и могу обойти сайт и нормально публиковать в HTML-формы, но теперь я столкнулся с новым вызовом, Ajax- формами.
Поскольку источника для чтения нет, мне остается только задаться вопросом, возможно ли заполнить форму Ajax программно, в C#. В настоящее время я использую невидимый axWebBrowser.
Заранее спасибо за помощь!
2 ответа
Да, но я рекомендую использовать другой подход к запросу / ответу на страницы сервера, включая обычные страницы и страницы обработчика 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 - это также запрос, но с другим методом. Смотрите на этой странице пример того, как сделать очень простой пост.
РЕДАКТИРОВАТЬ - Подробная информация о проверке поведения страницы с Firebug
Под проверкой страницы, которую вы пытаетесь воспроизвести, я имею в виду использование инструмента (я использую Firebug - в Firefox) для определения потока информации между страницей и сервером.
С Firebug вы можете сделать это с помощью панелей "Net" и "Console". Панель 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 работает как технология.
Вы смотрели на использование Selenium. AFAIK, вы можете написать тестовые примеры на C#, и я знаю, что наши тестировщики успешно использовали его до того, как пользовательский интерфейс протестировал сайт ASP.NET с поддержкой Ajax