Тестирование сайта с использованием C # - PullRequest
1 голос
/ 05 августа 2010

Люди,

Мне нужно выполнить сложное сканирование в Интернете.

Цель простыми словами: войти на страницу, ввести некоторые значения в некоторые текстовые поля, нажать Отправить, а затем извлечь некоторые значения из найденной страницы.

Каков наилучший подход?

  1. Какой-нибудь модульный тест сторонней библиотеки?
  2. Ручное сканирование в C #?
  3. Может, для этого есть готовая библиотека?
  4. Любой другой подход?

Это необходимо сделать в веб-приложении.

Ваша помощь высоко ценится.

Ответы [ 6 ]

4 голосов
/ 05 августа 2010

WatiN.

http://watin.sourceforge.net/

var browser = new IE();

browser.GoTo("http://www.mywebsite.com");

browser.TextField("username").TypeText("username goes here"); // alternatively, use .Value = if you don't need to simulate keystrokes.

browser.Button(Find.ById("submitButton")).Click();

и в ваших заявлениях на странице возврата:

Assert.AreEqual("You are logged in as Username.", ie.TextField("username").Value); // you can essentially check any HTML tag, I just used TextField for brevity.

Редактировать -

После прочтения изменений, сделанных в веб-браузере, вы можете рассмотреть возможность использования WebRequest и пакета HTML Agility Pack для проверки того, что вы получите:

WebRequest:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

HTML Agility Pack:

Как использовать пакет Agility для HTML

3 голосов
/ 05 августа 2010

Не уверен, как это будет работать в веб-приложениях, но вы рассматривали возможность попробовать HtmlUnit ?Я думаю, что он должен работать нормально, так как это в основном браузер без головы.

Стивен Сандерсон написал в блоге сообщение об использовании HtmlUnit в .NET code .

2 голосов
/ 09 ноября 2010

Если вы ищете что-то более легкое, попробуйте SimpleBrowser для .Net - с открытым исходным кодом на Github.

https://github.com/axefrog/SimpleBrowser

1 голос
/ 09 января 2012

Удивленный HTMLAgilityPack не упоминался.Это, безусловно, самый простой в использовании.

Сканирование сайтов с использованием C # и Xpath

1 голос
/ 05 августа 2010

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

http://www.nunit.org/

Почему в веб-приложении? Это как краш-тестирование машины внутри машины.

0 голосов
/ 05 августа 2010

Если вы знаете, что значения формы сообщения должны входить и выходить, вы можете создать приложение на C #, которое использует HttpWebRequest и отправлять на страницу и анализировать результаты.Этот код является узкоспециализированным для моего собственного использования, но вы должны быть в состоянии настроить его и заставить делать то, что вы хотите.На самом деле это часть большего класса, который позволяет вам добавлять / отправлять элементы в него, а затем отправляет запрос http для вас.

// this is for the query string
char[] temp = new char[1];
temp[0] = '?';

// create the query string for post/get types
Uri uri = _type == PostType.Post ? new Uri( url ) : new Uri( ( url + "?" + postData ).TrimEnd( temp ) );

// create the request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create( uri );

request.Accept = _accept;
request.ContentType = _contentType;
request.Method = _type == PostType.Post ? "POST" : "GET";
request.CookieContainer = _cookieContainer;
request.Referer = _referer;
request.AllowAutoRedirect = _allowRedirect;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3";

// set the timeout to a big value like 2 minutes
request.Timeout = 120000;

// set our credentials
request.Credentials = CredentialCache.DefaultCredentials;

// if we have a proxy set its creds as well
if( request.Proxy != null )
{
   request.Proxy.Credentials = CredentialCache.DefaultCredentials;
}


// append post items if we need to
if( !String.IsNullOrEmpty( _body ) )
{
  using( StreamWriter sw = new StreamWriter( request.GetRequestStream(), Encoding.ASCII ) )
  {
     sw.Write( _body );
  }
}

if( _type == PostType.Post &&
     String.IsNullOrEmpty( _body ) )
{
  using( Stream writeStream = request.GetRequestStream() )
  {
      UTF8Encoding encoding = new UTF8Encoding();
      byte[] bytes = encoding.GetBytes( postData );

      writeStream.Write( bytes, 0, bytes.Length );
    }
}

if( _headers.Count > 0 )
{
  request.Headers.Add( _headers );
}//end if

// we want to keep this open for a bit
using( HttpWebResponse response = (HttpWebResponse)request.GetResponse() )
{
    // TODO: do something with the response
}//end using
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...