Что мы делаем, когда нам позарез необходимо заполнить форму с кучей полей для того, чтобы перейти непосрественно к тестируемому модулю?
Обычно мы начинаем вводить во все поля что-то типа "шлмцтал" (танец пьяных пальцев по клавиатуре) и сильно раздражаемся полям, в которых есть ограничения, дата рожения, например. Ну мы же сейчас не эту форму тестируем, нам все это только мешает.
Если мы хотим видеть на выхлопе нормальные данные, а не свои пьяные танцы, то можем использовать копипасту. Однако радости мало каждое поле копировать - вставлять.
Еще варианты? Правильно! Роботы!
Один из самых известных - imacros для мозиллы. Простой, удобный и тд.
Но мы же не ищем легких путей, правда? И вообще, мы хотим видеть разные значения! И еще вооон туда перламутровых пуговиц, пожалуйста.
Тогда на помощь нам приходят... самописные роботы!
Об одном мы с вами и поговорим. Microsoft Visual Studio + Watin преставляют...
Итак. что мы хотим? Хотим заполнить форму. Или две формы. Одинаковые по сути, но разные по смыслу. Ну, например, представим, что у нас везде, на всех сайтах, окно регистрации одно и тоже. И вот мы хотим регистрироваться в Гугле и Яндексе. А формы - одни и те же, поля теже самые. Ну вот захотелось им так.
Что делаем мы? Открываем Microsoft Visual Studio и создаем "Windows Forms Application"
Получаем нашу формочку:
Далее выбираем View - Toolbox
В открывшемся окошке раздриливаем All Windows Forms и выбираем кнопку:
Перетаскиваем кнопку на нашу формочку.
Справа внизу видим ее свойства, Properties - вбиваем там в поле Text значение "Регистрируемся в Google". Потом добавляем вторую, которая будет - "Регистрируемся в Yandex".
Дабл-клик по кнопке - мы переходим в код, который будет выполнять наша кнопка. Точнее, дизайнер, в котором мы рисовали кнопку, сгенерит событие "нажатие на кнопку". А метод, который мы напишем "в кнопке", будет вызываться при генерации этого события.
Теперь вступает в силу Watin.
Создаем отдельный проект - Class Library, в нем создаем класс "Model"
В модели мы показываем, с кем и как мы имеем дело:
private WatiN.Core.Browser browser;
public Model(Browser browser)
{
this.browser = browser;
}
public void РегистрируемсяВGoogle()
{
browser.GoTo(@"http://adress");
}
public void ЗадатьФамилию (string lastName)
{
browser.TextField(Find.ById("txtLastName")).TypeText(lastName);
}
public void ЗадатьИмя (string firstName)
{
browser.TextField(Find.ById("txtFirstName")).TypeText(firstName);
}
Мы сказали, что будем использовать ватиновский браузер, с помощью метода "регистрируемся" будем переходить на ссылку регистрации в гугле (как вариант - потыкаться в некие кнопочки - предусловия вашей формы), остальные методы - это наши поля.
Находим их через FireBug, получаем id, class и тд. По ним и ищем. Просто и быстро)
Вбивать параметры мы можем как? Можем уже в тестах. Можем добавить файл в проект (уже в наш "Windows Forms Application", а не "Class Library").
Если делаем файлом: обавляем в проект файл типа XML File.
Заполняем его своими разными значениями.
<ФормыВвода>
<Форма lastName="Киселева" firstName="Ольга"
/>
<Форма lastName="Абаев" firstName="Николай"
/>
Что мы ему сказали? Что у нас есть два вариант заполнения формы - Киселева Ольга и Абаев Николай. Все параметры записываем через пробел, пихаем сколько влезет, как параметров, так и вариантов.
Теперь вернемся к коду робота. Который открывается аблкликом по кнопке на нашей форме.
Что мы пишем в нем?
public partial class Робот : Form
{
public Робот()
{
InitializeComponent();
}
private void btnHellow_Click(object sender, EventArgs e)
{
//открыли браузер
var rnd = new Random();
var browser = new IE();
browser.BringToFront();
//перешли на нужную форму, прочитав по пути XML
var моделька = new Model(browser);
моделька. РегистрируемсяВGoogle ();
моделька.ОткрытьФормуРегистрации();
XmlDocument doc = new XmlDocument();
doc.Load(Path.GetFullPath("Data.Xml"));
//Получаем рандомные значения из XML
var forms = doc.DocumentElement.ChildNodes;
var randomIndex = rnd.Next(forms.Count);
var form = forms[randomIndex];
//Присваиваем переменным значения из XML
string lastName = form.Attributes["lastName"].Value;
string firstName = form.Attributes["firstName"].Value;
bool alert = bool.Parse(form.Attributes["alert"].Value);
//Заполняем формочку
моделька.ЗадатьФамилию (lastName);
моделька.ЗадатьИмя (firstName);
моделька.ПодтвердитьРегистрацию();
}
Я туда помимо Фамилии и Имени добавила значение чек-бокс, в котором стоит галка, или не стоит. В XML мы этому параметру присваиваем значение true\false.
Таким образом, что мы имеем? Мы имеем по нажатию на кнопочку заполнение формы любым из приведенных вариантов.
И это самый простой способ. Можно сделать и так, что он каждому полю будет выдавать один из N вариантов, тогда у нас получится не всего 3 варианта заполнения, а N степень вариантов ))))
Также это приложение теперь можно сохранить для тех коллег, у кого нет Студии - включаем режим релиза:
Компилируем наш проект.
(Если хотим исходный код отправить - полезно сделать так: Build - Clean Solution. Так он меньше места занимать будет)
Потом открываем папку с нашим приложением\bin\Release
Удаляем все лишние файлы - с расширениями pdb и xml (кроме того, который используем в проекте).
Потому всю папку Release упаковываем и отсылаем по почте :)