Что мы делаем, когда нам позарез необходимо заполнить форму с кучей полей для того, чтобы перейти непосрественно к тестируемому модулю?
Обычно мы начинаем вводить во все поля что-то типа "шлмцтал" (танец пьяных пальцев по клавиатуре) и сильно раздражаемся полям, в которых есть ограничения, дата рожения, например. Ну мы же сейчас не эту форму тестируем, нам все это только мешает.
Если мы хотим видеть на выхлопе нормальные данные, а не свои пьяные танцы, то можем использовать копипасту. Однако радости мало каждое поле копировать - вставлять.
Еще варианты? Правильно! Роботы!
Один из самых известных - imacros для мозиллы. Простой, удобный и тд.
Но мы же не ищем легких путей, правда? И вообще, мы хотим видеть разные значения! И еще вооон туда перламутровых пуговиц, пожалуйста.
Тогда на помощь нам приходят... самописные роботы!
Об одном мы с вами и поговорим. Microsoft Visual Studio + Watin преставляют...
Итак. что мы хотим? Хотим заполнить форму. Или две формы. Одинаковые по сути, но разные по смыслу. Ну, например, представим, что у нас везде, на всех сайтах, окно регистрации одно и тоже. И вот мы хотим регистрироваться в Гугле и Яндексе. А формы - одни и те же, поля теже самые. Ну вот захотелось им так.
Что делаем мы? Открываем Microsoft Visual Studio и создаем "Windows Forms Application"
Получаем нашу формочку:
Далее выбираем View - Toolbox
В открывшемся окошке раздриливаем All Windows Forms и выбираем кнопку:
Обычно мы начинаем вводить во все поля что-то типа "шлмцтал" (танец пьяных пальцев по клавиатуре) и сильно раздражаемся полям, в которых есть ограничения, дата рожения, например. Ну мы же сейчас не эту форму тестируем, нам все это только мешает.
Если мы хотим видеть на выхлопе нормальные данные, а не свои пьяные танцы, то можем использовать копипасту. Однако радости мало каждое поле копировать - вставлять.
Еще варианты? Правильно! Роботы!
Один из самых известных - 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="Николай"/></ФормыВвода>
Что мы ему сказали? Что у нас есть два вариант заполнения формы - Киселева Ольга и Абаев Николай. Все параметры записываем через пробел, пихаем сколько влезет, как параметров, так и вариантов.
Теперь вернемся к коду робота. Который открывается аблкликом по кнопке на нашей форме.
Что мы пишем в нем?
Я туда помимо Фамилии и Имени добавила значение чек-бокс, в котором стоит галка, или не стоит. В XML мы этому параметру присваиваем значение true\false.
public partial class Робот : Form{public Робот(){InitializeComponent();}
private void btnHellow_Click(object sender, EventArgs e){//открыли браузерvar rnd = new Random();var browser = new IE();browser.BringToFront();
//перешли на нужную форму, прочитав по пути XMLvar моделька = new Model(browser);моделька. РегистрируемсяВGoogle ();моделька.ОткрытьФормуРегистрации();XmlDocument doc = new XmlDocument();doc.Load(Path.GetFullPath("Data.Xml"));
//Получаем рандомные значения из XMLvar forms = doc.DocumentElement.ChildNodes;var randomIndex = rnd.Next(forms.Count);var form = forms[randomIndex];
//Присваиваем переменным значения из XMLstring 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 упаковываем и отсылаем по почте :)
(Если хотим исходный код отправить - полезно сделать так: Build - Clean Solution. Так он меньше места занимать будет)
Потом открываем папку с нашим приложением\bin\Release
Удаляем все лишние файлы - с расширениями pdb и xml (кроме того, который используем в проекте).
Потому всю папку Release упаковываем и отсылаем по почте :)
Мадам знает толк...
ОтветитьУдалить