четверг, 29 декабря 2011 г.

Тестирование игр на мобильных телефонах - Курс молодого бойца

Ура, товарищи! Оно состоялось! В смысле, радио... Для нас. любимых. Кто еще не в теме, может почитать тут или сразу тут. Русское сообщество тестировщиков набирает обороты и с каждым годом появляется все больше и больше платной и бесплатной информации. Для начинающих, для продвинутых, для "ручных" тестировщиков и для автоматизаторов, для дизайна и исследований...

Мое выступление предназначается для людей. которые только-только пришли в тестирование. Или еще только хотят туда прийти. В тестирование игр, на мобильных телефонах.


Задумываетесь ли вы о том, какие "опасности" подстерегают вас на пути к достижении цели - стать тестировщиком? Что вы вообще знаете о профессии, к которой хотите стать причастным? Уверены ли вы, что быть тестировщиком - так легко и просто, как казалось?

В первой части выступления мы рассмотрим самый главный миф о тестировании игр.

среда, 28 декабря 2011 г.

Самописный робот на Watin

Что мы делаем, когда нам позарез необходимо заполнить форму с кучей полей для того, чтобы перейти непосрественно к тестируемому модулю?

Обычно мы начинаем вводить во все поля что-то типа "шлмцтал" (танец пьяных пальцев по клавиатуре) и сильно раздражаемся полям, в которых есть ограничения, дата рожения, например. Ну мы же сейчас не эту форму тестируем, нам все это только мешает.

Если мы хотим видеть на выхлопе нормальные данные, а не свои пьяные танцы, то можем использовать копипасту. Однако радости мало каждое поле копировать - вставлять.

Еще варианты? Правильно! Роботы!
Один из самых известных - 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 упаковываем и отсылаем по почте :)

суббота, 24 декабря 2011 г.

Сны больного тестировщика...

Что такое наши сны? Зачастую это некое отражение реальности. О чем мы думаем днем, то приходит к нам ночью. Правда, иногда в неожианном виде :)

Не так давно отгремела 10-я юбилейная конференция SQA Days.
Которая оставила свои впечатления в наших душах...

А еще на прошлой недели я рассматривала раздел тренингов на небезызвестном сайте. Нашла много "вкусненького", но при этом все онлайн, да с ДЗ... А очные тренинги... Ну как-то не то, читаешь описание и вроде все знаешь...

А с другой строны, где-то внутри точит мыслишка о том, что иногда ты только думаешь, что все знаешь :) И иногда полезно сходить на что-то "очевидное", и вынести оттуда новую мысль.

Почему бы таким мыслям не соединиться... Во сне? :)
Тут еще и зима наконец-то в Москву пришла, всю неделю я с переменным успехом боролась с плохим самочувствием, болящим горлом по утрам. И все-таки слегла, второй день честно соблюдаю постельный режим и накачиваюсь горячим чаем, а то мне, глядишь, выступать скоро, а у меня горло болит...

Так что чай и спать... А там... С воспаленным то воображением...

Иногда ты даже во сне осознаешь нереальность происходящего, а иногда никак не можешь понять, что это - сон. Попала я там на конференцию. Причем SQA. Но никак не могла понять - на какую. Точно знаю, что до 11 еще далеко... Наверное, что-то промежуточное.

У меня был список докладов, но я никуда не могла попасть, то заблужусь, то поговорить остановлюсь - в общем, шастала я там по коридорам, в залы не заходя.

А в коридорах стояли стулья у стен, на них люди, видимо, ожидали интересного для них доклада (а, сюда, видимо, еще и получение прав приплелось, в сон то. Это в ГАИ лавочки вдоль стен...). На одом из стульев сидел Алексей Баранцев.

Посмотрел он меня, покачал головой и сказал укоризненно... За точность фразы уже не ручаюсь, но что-то типа "Оля, Оля, что же ты на тренинги то не записалась...".

И мне даже стыдно стало! Ну вот как раз на тему того, что "а так ли ты уверена, что все знаешь." Хороший исследователь? И так уж прям уверена, что Алексей ничего нового для тебя не расскажет?

Подсела к нему, заглянула в тетрадку, посмотреть, чтож там за тренинг то первый будет. А там чушь какая-то, к тестированию отношения не имеющая, что-то типа "Как познакомиться с принцессой". Я ему говорю, "ну а мне то он зачем, я же девушка". "Ну давай вот мы заменим девушек на мужчин, принцыпы, они же одни"...

А мне же стыдно, я так поприкидывала, поприкидывала, да и уточняю с сомнением - "и сколько же он стоит?". Ответа на этот вопрос Алексей не знал, так что мы так и не договорились :) А там уже и время пришло, побежала я на какой-то доклад. Но не добежала, то ли заблудилась, то ли опоздала, то ли вобще проснулась...

Мораль сей басни такова - будьте здоровы, друзья!
А то, негоже оно, под Новый Год заболеть...

четверг, 22 декабря 2011 г.

Программирование - для тестировщиков, часть 2

Вернемся к нашим баранам. Как я уже писала ранее, отзывы желательно оставлять сразу, на "свежую", ну или не очень, голову. А то потом забудешь детали и вынесешь свой очень "весомый" и "полезный" вердикт - "Хорошие\плохие курсы". А почему? Да не помню, просто впечатление осталось... Полезно оно будет такой отзыв почитать, когда человек только размышляет, надо ли оно ему?

Сегодня у меня плохое настроение. Вчера был корпоратив и подъем на работу в 6.30 особой радости мне не принес... Может, поэтому все в мрачном свете?

Прошла уже большая часть занятий, мы даже более-менее разобрались в тестированием веб-сайтов. И все меньше и меньше мне нравится java :) Но тут уж на вкус и цвет, как говорится...

Хотя я все больше склоняюсь к C#, курсы на яве не прошли даром. Во-первых, при изучении языка приятно, услышав что-то ранее в принципе незнакомое, например, "итератор", покивать головой "А! Да, да! Мы это делали в ДЗ". Хотя вспомнить, как именно "делали", уже проблематичнее :))))

Но языки похожи, задачки тоже бывают похожие. И алгоритм решения тебе уже понятен. И всегда можно пересмотреть запись занятия, что вдвойне приятно :)

Немного недолюбливаю командную строку, так что недовольно бурчала, когда учились запускать тесты оттуда )))) И делала это строго по инструкции, никакого полета фантазии, как при написании самих тестов.

Зато понравились домашние задания, которые вроде и не обязательные, но на тему того, что не затрагивалось в классе. Страничку для печати, например, пришлось долго и упорно дебажить, чтобы понять, как она, блин, строится, если не халявно, а с "незаполненным вот этим полем, или вон тем, а еще есть такой вариант" и тд.

А когда мы сидим, разбираемся, мы нарабатываем ту самую практику, ради которой сюда и пришли! Я сама выбрала курс благодаря отзывам и благодаря наличию домашнего задания в нем. Потому что теория без практики - ничто.

Прошли веб-часть, пошли дальше. В понедельник посмотрела на ява-приложение.
Сделала ровно столько, сколько было в записи. В четверг, мол, доделаю последнее ДЗ. Ага.

Посмотрела на приложение опять, уже сегодня. Пошла к программистам, они на него покосились и сказали "не, не сталкивались с таким". Посмотрела еще раз... И закрыла нафиг :)

Что я вам скажу? Firebag развращает :) Когда нельзя найти элемент и сидеть разбираться в уже более понятном тексте, это раздражает. Особенно когда ты злой. И не выспавшийся. И проигравший очередную партию хоккея :)

Вот так вот шла домой и искала себе оправдания - "нет, все понятно, это сделано, чтобы осознать, что структура от того, веб или вин, не изменится. Те же тесты, та же UI-моделька... Но нафига мне это ява-приложения? Да таких вообще почти нет! Зачем мне уметь с ним работать... Все равно ведь ДЗ сдам и забуду через неделю-месяц. Без практики никуда. Практики не будет. Скорее всего, вообще никогда. А если и придется работать с ними опять, научат."

Хотя, конечно, если вдруг придется с таким работать  (тьфу-тьфу-тьфу), будет приятно смотреть не как баран на новые ворота, а припоминая "тот давний курс". Не спорю :)

Да и что уж там. Затем ли мы записываемся на курсы, чтобы потом кричать "у меня времени нет на ДЗ"? В большинстве случаев люди примерно представляют свой график - не будет времени? Так иди на курсы через полгода, когда оно будет. Хотя, если вечно нет времени, то это тоже отличный вариант - прослушивать записи и мелкими шажочками двигаться вперед.

Но это не мой вариант. Время то есть. Было бы желание. Так что придется завтра доделывать ДЗ... А иначе у меня никогда на него времени не найдется. Работа, отдых, другая работа... Да мало ли причин можно придумать, лишь бы не делать? :)

среда, 7 декабря 2011 г.

Программирование - для тестировщиков?

Продолжая тему, в которую абсолютно внезапно вылился один скромный отзыв...
А то вдруг кто-то из отметившихся там еще не в курсе, что после конференции дискуссия продолжилась и им есть кому ответить :)

Так что же, "есть ли жизнь на Марсе?" (с)
Стоит ли тестировщикам изучать автоматизацию?
Осваивать программирование?

Или "не лезь, куда не просят"? Упал - уходи? (вспоминается доклад Татьяны на SQA Days и слайд со Спартой)

Нет, конечно же, нет. Никогда не ошибается только тот, кто ничего не делает! А мы будем делать, и будем изучать :)

Другой вопрос - как? Объектно - ориентированный язык выбирать или процедурный?
Учиться строить архитекруту или работать с консолькой?

Продолжим диалог :)
Прямо на моих глазах два тестировщика осваивают Джаву. Я бы не сказал, что все у них хорошо. То проблемы с доступом к полям, то еще что-нибудь.

Не знаю, как вас, а меня бы больше удивило, если бы у них все было хорошо. Виданное ли дело, чтобы все с первого раза идеально получалось? Разумеется, у них будут проблемы с доступом к полям, с поиском кнопок и вводом строки с символами типа кавычек.

Но если бы все, у кого с первого раза что-то не получилось, бросали бы это дело, люди вообще ничем бы не занимались! Так и жили бы, охотясь на мамонтов, да разводя костер. Кому оно надо, колесо мастерить, против людского мнения переть с девизом "Земля круглая" и тд? Не получилось? Бросаем! Найдем что полегче, попримитивнее!
А без ide приходится постоянно следить за простотой и логичностью конструкций, за лаконичностью кода. Результат: проект растет, но дебаг простой, расширение простое, навигация в ворохе исходников проста, как никогда. Без IDE, без "перейти к".
А что, с IDE мозги автоматом отключаются? Ну напишет новичек код, непростой, потом через месяц попробует прочитать, не поймет и перепишет (хотя врядли, скорее пойдет к программистам и вместе каждую строчку разберут). Раз, другой, третий, на пятый запомнит, что значит этот код :) И перепишет более простым языком.
А если выбор экосистемы вообще так жестко не стоит, тогда какие проблемы-то?
Самый главный вопрос :)
В котором и ответ кроется. Какие проблемы-то? Изучить то, что ты выбрал сам?
Не ссылаясь на то, что для новичка будет "сложно", а что - "легко"...

Welcome to discuss!

воскресенье, 4 декабря 2011 г.

SQA Days 10, День Второй...

А ты был на конференции? (Продолжение... Начало тут)

Знакомьтесь, Ульяновск! От которого к нам приехали 3 девушки и 1 молодой человек ))) Изображенная на фото девушка, кстати, выиграла приз у Панкратова за лучший фильм, но об этом ниже :)


Хабаровск! Тоже активные девушки :))

Кстати, еще по первому дню вспомнилось. Из запоминающегося: слайды. У Татьяны Зинченко, когда она представлялась, был слай "сарказм" из "Теории Большого Взрыва", он у меня на работе прямо на рабочем столе лежит, для общения с программистами ))))) Хотя реко бывает необходим.

И у Станислава Косарева был ну просто мега-слайд, на котором котята сидят. радостные такие "я хочу сделать мир лучше!!!" и черный сидит отдельно, глядя в сторону - "а я - управлять миром" ))))) Ну просто вообще зачет! Жду слайдов, сохраню себе)))

А еще запомнился (кстати, на следующий день хорошо вспоминать, что "запомнилось", по горячим следам все помнишь, а вот через недееееельку....) доклад Александра Барановского про собеседования тем, как он работал с пультом. На экран за своей спиной он если и посмотрел, то всего пару раз за все время докладов. А так - просто ходил себе, а за спиной у него менялась картинка. На фоне всех остальных, посматривающих на стену, хотя бы, чтобы убедиться, что слайд сменился, это выглядело круто и привлекало внимание. Хотя он тоже посматривал, сменился ли слайд, но хитро - глядя вперед, на ноутбук перед собой, кидая туда мельком взгляд и продолжая делать вид, что все работает "само"... Круто докладывал, в общем!

Но хватит о прошлом, конференция, день второй. Я вчера чуть не докаркалась, немного, но проспала, хорошо, что у меня ночью с арифметикой было плохо и я в свое время "когда встать" заложила риск проспать. Так что первый доклад я тоже успела прослушать, хотя накануне и подумала, что обойдусь без него. Как-нибудь переживу )))

Но Анна Шеретова подготовила замечательный доклад! Я не жалею, что успела))) Подкинула новые идеи насчет таблицы для программистов. А то некоторые после настырных докапываний "а что ты мог сломать?" саи стали в комментах писать "Ольга, не забудь проверить там то". А некоторые на этот вопрос до сих пор упрямо не отвечают. Другой вопрос, как бы это внедрить то... Как удаленно смотивировать )))) Ведь все мы знаем, что скажут люди на инновации и доп работу :) Хо хо хо... Самой бы время найти еще :) А то навалилось тут, ни один отпуск не поможет

Ах да, похвалю себя, когда она загадала свою загадку, "внучка" ответила первая я :) Сидящий рядом может подтвердить. Но так как Анна зачитывала условие в этот момент, микрофон я перекрикивать не решилась, а потом задумалась, а правильно ли я поняла ))))

Перед докладом Ани объявили о расплодившихся багах за ночь. Интересная фишка, но для тех, кто рано встал, ей-богу))) Я приехала, и пошла в зал. Прогулялась разве что лица знакомые увидеть. Баги уже все нашли. А потом пошла череда конференций, когда из одного зала бежишь в другой место занять, дабы на полу не сидеть, какое там наклейки искать...

Потом я пошла на стенды. Илья Фомин опаздывал и его заменил Стас Фомин, красочно живописав проблемы с визитными карточками своей компании ))) Доклад Павлова на его фоне был намного скучнее + куча текста на слайдов, ай яй яй в общем. Какой контраст.

После пуфиков я вернулась на стенд В, послушать про себя, раздвоившуюся личность. Александ Калугин покапитанил насчет того, как не был недогруженным и перегруженным. Хотя почему сразу покапитанил? Ведь он рассказал про опыт своей компании, к которому они пришли методом проб и ошибок. И мы пришли ко многому, что я услышала на конференции. И так приятно понимать, что большинство докладов не принесли чего-то нового в твою рабочую жизнь. Что ты это и так делал :)

Хотя я и попробовала задать вопрос насчет того, что тебе не отдают собственную багу на тестирование. И у меня реально была такая ситуация, когда багу повесили на менее загруженного человека, причем без моего ведома, так то мы при создании баги указывали в джире, кто будет проверять. А тут бац и молча сменили. Ты, типа, свою большую доработку тестируй. А то, что багу посмотреть 5 минут, то пофиг.

В общем, вопрос плавно перешел в жаркий спор за обедом, не с докладчиком, правда. Некий холивар про приоритеты и тд. И я продолжаю настаивать, что тестировщик ВСЕГДА может найти время на третий проект (звучал и такой вопрос) или на проверку баги... Надо только захотеть :) В конце концов, я, может, на 5 минут позже домой пойду, но дайте возможность решить. Программисты от такого перерыва "бааальшой" доработки бы не пострадали, у них уже было, что исправлять)))

После обеда мы пошли на круглый стол и оказалось, что он уже идет и, видимо, давно. Хотя вроде мы пришли вовремя... Ну да ладно, дослушали и снова разбрелись по залам. Ну кто-то по залам, кто-то на пуфики. Правда, на выступление Орлова я попала под конец уже, Но не могу вспомнить, а где ж я была то после круглого стола... Или он просто раньше начал  закончил...

Потом послушала про эффект горизонта.  Любопытный доклад, но мотивации к действию я не получила. Посмотрела с другой стороны...

Далее был идеальный скринкастер. Этот доклад Стаса Фомина был хуже утреннего. Майнд меп мелкая и воспринимается как-то не очень на презентации. Вот у себя под носом и вся - может быть. А какие-то куски... Ну лучше бы тем же скринкастером, да в презентацию засунуть, обработать. Время занимает, конечно, да, но смотрелось бы лучше. Правда, слайды приятнее) Ждем-с самого инструмента теперь...

Далее приехал Илья Фомин, однофамильцы там чуть не подрались за право поговорить "со сцены" )))) Послушали доклад про общение письменное. Капитанство, с одной стороны, а с другой. Ну не все об этом подумают или вспомнят, когда столкнутся. Так что вполне полезно людям, которые общаются с помощью писем.

Я хотела остаться на ретроспективу, но меня к тому моменту уже просто утомили эти пуфики и я пошла в зал. Хотя, кстати, мне сказали, долад был не супер. Тема доклада слабо освещена. Зато освещены импакт анализ и фишки, о которых говорила Руколь... То есть всего понемногу. Что не очень хорошо...

Так я попала на доклад Виктора Малыя (не знаю, правильно ли написала). Но... Может, я слишком устала?

К тому же явная ошибка... Опять же, хорошо мне судить, пока сама не выступала, просто по книгам. Сидишь себе, начитавшись умных книжек и отчетливо видишь косяки других аля "не смотрел в зал, смотрел в монитор" и тд. Так вот Виктор бегал взад - вперед по сцене почти без остановок.

А что мы читаем в книгах практиков? Стоять оловянным солдатиком - нельзя! Но и двигаться "без повода" тоже не надо, ведь внимание больше привлекают именно движущиеся предметы/объекты. Так что даже сейчас я вспоминаю, как он бегал по залу... А вот о чем говорил... Раз потеряла нить доклада - хочется спать + отвлекаешься на движение и в итоге не слушаешь докладчика, а просто наблюдаешь за его перемещениями. Сосредоточилась, смотрю на экран. А докладчик то мельтешит )))) Опять на него переключилась. Два, три... В итоге "не выдержала душа поэта", вышла в коридор освежиться.

Побродила, побродила, прошла мимо Надежды Кобозевой. Подошла сзади - ну нифига не слышно. Сделала круг, вышла прямо со стороны докладчицы, недалеко от нее стоя - все равно ничего не слышно! "Ужас", подумала я и пошла дальше. Я, разумеется, не про сам доклад, который я не слышала. Просто сочувствую тем, кто с тихим голосом выступал без микрофона. Ну и тем, кто их слушал.

После кофе-брейка вернулась в 1 зал послушать Орлова с Панкратовым. Протормозила на "идите сюда 3 команды", ну да ладно. Смотреть тоже было интересно. Первое кино было, конечно, фееричным. На его фоне остальные просто поблекли и казались скучными. Это при том, что у них было больше времени на подготовку, общее + время кино 1 команды + ее обсуждение... Жду записи, посмотреть, послушать, себе записать)))

На том конференция и завершилась. Очень здорово! И круто!! Но утомительно, конечно, тоже. Особенно сложно выпасть на два дня из работы, причем совсем. Тем более мне, из-за меня сдвинулся релиз, мне теперь стыдно :((( Но работать после полуночи после двторого дня конференции... Я не могу, а заставлю если - будет неэффективно.

Страшно подумать, что в Киев приется поехать дня на 3-4, потому что я с ужасом слушала людей, которые пришли в первый день на конференцию прямо с поезда!!! Это ужас. А данная героиня еще и до дискотеки "дожила". Супер, умничка! Ну и уезжать, не дослушав все, что хотелось, тоже не круто. Так что в другие города - только с ноутбуком, а что делать :)

Но так - организаторы молодцы, респект!!! И докладчики молодцы! Лучше капитанить для многих, но научить тех, кто об этом еще не знал! А для слишком умных есть и такого же уровня доклады. Надо же сделать конференцию приятной и доступной и интересной всем :))) Воть.

суббота, 3 декабря 2011 г.

SQA Days 10, День Первый...

А ты был на конференции?


Ну, там типа на бейджике видна надпись "SQA Days 10", применим воображение, товарищи, даром, чтоли, в такой профессии :)))

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

По итогам первого дня:

четверг, 1 декабря 2011 г.

Дмитрий Лазарев: "Презентация, лучше один раз увидеть!"

Как и обещала, рассказываю о полезной книжке для будущих ораторов.

Ссылка на OZON.

Не могу не упомянуть о знаменитых книгах Радислава Гандапаса:
Тут стоит отметить, что вторую книгу я еще не читала, только слышала хорошие отзывы. В Озоне не догадалась сразу обе заказать, а в ближайшем книжном я ее, увы, не нашла, последнюю купили в тот день.

Ну а раз уж я вообще дошла до этого самого книжного, то стала изучать полки.

Во-первых, издательство вышеприведенных книг очень хорошее, выпускает именно интересные книги. Захватила их книжечку.

Во-вторых, поискала что-нибудь еще по презентациям. Так и нашла книгу Лазарева, полистала, полистала, понравилось. Плюс оглавление внушало нечто новое. Да и Заказчика нашего в его клиентах нашла :))))

У Гандапаса, например, не было отдельных глав про PowerPoint или Мыслительные Карты.

Теперь вот рекомендую - почитайте, интересная книга!

Радислав Гандапас пишет очень легко, его книги читаются на одном дыхании. Он пишет о том, как выступать.

Лазарев тоже читается довольно легко (хотя и чуть хуже :) ). В его книге, наоборот, о том, как выступать, всего пара последних глав. Его книга именно о создании презентации. Где, как, когда, какими инструментами.

Все с наглядными картинками. Понравилась центральная вставка "До" - "После".
Единственный минус - нашла в "До" шаблон своей уже готовой презентации ))))) Теперь терзают мысли снести ее нафиг и перерисовать...

Так что, если вы намереваетесь выступать, например, в будущих ConfeT&QA, то рекомендую вам прочитать обе книги, так как они написаны о разном и вполне дополняют друг друга. Кстати, для он-лайн презентации то, как нарисована презентация, играет даже большую роль, ведь у вас нет возможности видеть аудиторию, активно ее вовлекать и тд
Лазарев: "Презентация, лучше один раз увидеть!"

PS - Добавила книгу в общий список прочитанных мною книг.

суббота, 26 ноября 2011 г.

Программирование для тестировщиков

Решила пойти по горячим следам и оставлять отзывы сразу, а не после всего курса. Пока еще воспоминания свежи. Иначе в конце отчет будет довольно короткий, все ведь не упомнишь.

Так что, если вы еще размышляете, идти ли вам на эти курсы... Добавлю свое мнение к остальным!

Итак, встал вопрос об автоматизации тестирования. Дано добро на курсы, когда мы выберем инструмент. Я нашла себе курсы на специалисте, где автоматизации учат в два этапа, на первом даются основы программирования. Вот эти

Свыше их забраковали:

Основы программирования и баз данных - полная чухня

Во-первых, Ольга, эти вещи должны были читать в бауманке на первом-втором курсах (кроме запросов SQL)
Во-вторых, тебе это точно не нужно для тестирования.
Обзорные знание методологий, языков и структур данных тебе никак не поможет.

Мое мнение - этот курс отметаем.
Хотя я нашла много незнакомых слов в описании основ программирования :)) Ну ладно.
Скачала себе триалку Тесткомплита и стала думать дальше.

Следующее предложение было уже о тренинге Алексей Баранцева.
Что помогло обосновать? Как раз таки отзывы уже прошедших ))) В которых упоминается домашнее задание, без которого в обучении - никуда. Плюс мое собственное мнение об Алексее как о хорошем докладчике (как раз прошла первая ConfeT&QA)

А вот программисты этот курс обсмеяли, на заметку Алексею, почитав расписание, вердикт был примерно такой же, как в цитате выше - "Первые два занятия вообще вода, лучше книжку почитай". Слова "А пока мы просто научимся решать конкретные практические задачи.
" не очень спасли, оставив ложное мнение о первых уроках.


И вот я участник данного курса :)
До его запуска я успела определиться таки с программой для автоматизации (мой выбор - Watin), и даже написать код. С помощью программиста мы написали тест, потом отрефакторили, потом вообще стерли и переписали )))

Однако что-то усвоить я уже успела. Поэтому первые два занятия мне были более-менее знакомы. И до разделения тестов и UI модельки (так она называется у меня, часть автоматизатора) мы дошли. И до принципа устойчивости тестов.

Формат обучения, если кто-то еще не в теме - просмотр записи вебинара с прошлых курсов. А то меня сильно удивил первый урок, во-первых, я невнимательно прочитала о том, что будут выкладываться записи и настроилась на то, что в понедельник в 5 будет вебинар. Даже время осводила.

А тут - курс прислали в пятницу. Сразу началась паника - это что мне, дз до понедельника надо сделать?!!!

Поняв, что время есть до четверга, поуспокоилась и включила запись. Сбивают с мыслей напоминания о том, что "консультации у нас во вторник", хотя у нас то консультации в четверг)))) Но это в принципе, только на первом занятии удивляет или напрягает. Потом привыкнешь.Зато приятно то, что всегда можно будет вернуться к какому-нибудь уроку. Особенно если понадобится перейти на селениум, а я уже все забуду)))

Первые 4 домашних задания не представили особой сложности. По крайней мере, мне не пришлось рыскать по интернету в поисках ответа на какой-то вопрос, а я читала об этом в других отзывах. Видимо, это еще предстоит!

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

В автоматизаци я далеко не эксперт, так что мысли вынесла. Правда, не прям на занятии, на занятии я как раз думала о том, что это мне, в принципе, уже знакомо, я это делала, просто в другом фреймворке.

А вот когда вернулась к своей работе, вынесенные знания мне очень помогли! Просто знайте - даже если вам ДЗ показались легкими, попробуйте заавтоматизировать свое приложение. Без практики не возникнут вопросы! А они возникнут ))))

Итак, сегодня у меня наконец-то нашлось время снова заняться своими автотестами. В последний раз я размышляла, как мне обращаться к разным страницам. Так-то я с подсказками программиста код писала, а тут решила начать новую ветку, чтобы закрепить свои знания.

И после второго урока я поняла, что мне надо удалить нафиг те новые классы, которые я уже успела создать, и вместо них сделать один - "Навигация". Ну конечно! Это же элементарно, Вадсон (с)

Вдохновленная новой идеей, взяла ручку и бумагу и накидала свои мысли туда. Потом уже перенесла в MindMap. Одобрение "рукописи" я, кстати, получила в одной любопытной книжке, о которой я напишу потом, когда прочитаю :)) Пока я вытащила оттуда мысль "сначала нарисуйте свою презентацию на бумаге, а потом беритесь за компьютер. Конечно, многие скажут, что проще делать сразу в PowerPoint, и это бессмысленная трата времени. Но с помощью карандаша и бумаги вы сможете сгенерировать большое количество идей за небольшой период времени, не отвлекаясь на манипуляции с мышью и клавиатурой"

Перенести мысли в компьютер самостоятельно я, однако, не смогла ))))
Тут же всплыла куча вопросов, пришлось опять прибегнуть к помощи программистов.

Но, по крайней мере, я уже знаю, какая у меня будет структура кода, и я вижу косяки в моем старом коде, я вижу то, что пора менять, пока не стало слишком поздно :)))

Тут и вылез новый вопрос. Есть код:

 
 
private Div ГоризонтальноеМеню()
{
var div = Browser.Div(Find.BySelector("#id"));
return div;
}

public void ПереходимВМодуль()
{
var div = ГоризонтальноеМеню();
div.Span(s => s.Text.Equals("НазваниеМодуля")).Click();
}

Но первая строка с div - это повторяющийся код, с него можно в несколько мест попасть. А если его id изменится? Везде менять?
А как достать? Ведь если мы вытащим var, сможем ли мы к нему обратиться? И как??
В сомнении я выделила эту строку и нажала волшебную комбинацию, на которую указал Алексей еще в первом занятии: Рефактор - Excract Metod. И получила такой же гениальный по простоте ответ:

public void ПереходимВМодуль()
{
var div = Browser.Div(Find.BySelector("#id"));
div.Span(s => s.Text.Equals("НазваниеМодуля")).Click();
}
Сама бы я долго думала, как же это написать))))
Так и пригодилось первое же занятие. Спасибо рефакторингу! Что бы мы без него делали))))

Очень жду 5 занятия, так как вопрос записи в файл меня мучается уже больше двух недель. И также надеюсь, что еще до этого занятия я научусь с этим работать, а потом сравню методы - свой и Алексея, вытащу идеи, до которых не дошла сама)

четверг, 24 ноября 2011 г.

Проблемы с компьютером, точка зрения Заказчика

Или «продавцам железа посвящается»… Сегодня мне бы хотелось поговорить со стороны Заказчика. Может, это на меня так рассылка Сергея Бережного влияет… А на самом деле просто не могу смолчать, крик души!
Что же необходимо делать людям, продающим компьютеры, чтобы угодить Заказчикам?
1.       Предоставлять качественное оборудование (кэп :) )
2.       Предоставлять качественные гарантийные услуги
3.       Предоставлять удобные дополнительные услуги (доставка)
Первый пункт в пояснениях, думаю, не нуждается. А вот о втором и третьем хочется рассказать. На примере своей ситуации. Разберем кейс со стороны Заказчика:
Я, как Заказчик, заплатила за некие услуги. А именно – поставку качественного оборудования. В довольно известной фирме. Почти 2 года назад. Как раз через 1,5 месяца закончится гарантийный срок. За что же я плачу? За то, чтобы как минимум 2 года у меня все работало. А так как мне хотелось увеличить этот срок, то и денег я заплатила побольше, выбрав комплектацию покачественнее.
Теперь ситуация. Месяц назад, как раз где-то 24 числа, я прихожу домой и включаю компьютер. Казалось бы – ничего не предвещало. Уже собиралась уйти, так как загружается он минуты 2-3, зачем перед ним все это время торчать? Но какая-то подозрительная тишина меня остановила. А где работа кулеров и тд? Смотрю – выключен… Хм, ок, снова нажимаю кнопку – полный игнор. Словно стоит себе блок питания, не включенный в сеть. В первый раз синяя лампочка около кнопки «Пуск» мигнула, я потому и отвернулась от него – все ж нормально. На повторные нажатия уже никакой реакции.
Что в итоге? В гарантийку его увезли (за мои, блин, деньги!), запустили, протестировали и вернули с диагнозом «да у вас все хорошо». Ага, просто так деньги за доставку выкинула. Долго я тогда злилась, почему, если вещь на гарантии и не работает, Я же еще и платить должна? Но так посмотрела сегодня – во многих магазинах, если не во всех, самодоставка в гарантийный отдел. Ну или платно, если сам не можешь. Хорошо, опускаем этот момент.
Заходит ко мне водитель, «получите распишитесь». Щаз, разбежалась:
- Давайте проверим.
- Да я ж в этом ничего не понимаю…
- Ничего, ничего, мы просто проверим, включается ли он.
Ну а что, мне же звонили из гарантийного отдела, объяснили, что проверили кучу разных тестов – и все хорошо! И вообще у них компьютер с первого раза загрузился. Но мне же не померещилось, что он не работал? Включаем в сеть, нажимаем на «пуск» - ноль эмоций, фунт презрения. С чем я его в ремонт и отдавала… Дальше пошло веселье. Включали разными шнурами (свое питание и от монитора), проверяли их и саму розетку на ноутбуке и мониторе – все работает! Кроме компьютера. И так и сяк. Позвонили туда, в гарантийку. Водитель сам с ними разговарил «и правда, не включается, мы то сделали, се сделали». На том конце провода человек уже решил приехать (вон оно! Правильное решение). Но… Передумал. Время позднее… Привози, говорит водителю, обратно. Вешаем трубку, делаем пару последних попыток… И, о чудо, он включился. Как? Почему? Да фиг его знает.
Водитель радостный уехал. Я тоже была вполне довольна. Все же мой мощный компьютер и старый (относительно) ноут не сравнить. Все хорошо? Да. Ну, правда, уже около года при загрузке комп выдавал «CPU FAN ERROR», после чего включался. Ну, не страшно. Мне это все говорят. Страшно то, что после их тестирования. блин, комп стал включаться ровно до этой надписи и требовал нажать F1 для продолжения. Не очень удобно, каждый раз при запуске ждать минуту, жать кнопку и ждать еще минуту… Ну ладно, фиг бы с вами. Работает ведь.
Вчера. Прихожу домой, включаю компьютер – синяя лампочка зажглась, включаю монитор и иду раздеваться. Очень удобно, чтобы не ждать этой «CPU FAN ERROR», включать его сразу по приходу. Возвращаюсь – экран черный… Смотрю на компьютер – он не включен. Пытаюсь включить…. Ну и опять та же фигня. Месяца не прошло. Первые мысли:
Как???!!! Ну КАК???!!!
В недавней рассылке про Заказчика было – «вам могут отказать в продвижении вашей идеи просто потому, что у Заказчика плохое настроение, не выспался, зуб болит, с женой поругался, что-то случилось и тд. Пробуйте еще!». Очень верное замечание. В мысленное бешенство меня привели две вещи – презентация и деньги.
Давно уже занялась презентацией, для начинающих тестировщиков. И, разумеется, не положила ее в DropBox. Ну конечно, все мы задним умом крепки. А ведь хотела сразу после SQA Days выступить. Почти все готово… Эх! И собиралась ей заняться именно вчера! Во вторник внезапно нашлись силы и желание поработать с ней, но была уже полночь и я уже выключила компьютер.
Ну и деньги тоже, сторонний банкомат сожрал карточку. Делают новую 7 рабочих дней. Вот пока ее не сделают, можно и не занимать денег/трясти заначку. Было. А с доставкой фиг, ищи средства. Поэтому именно в данной ситуации лишние траты вызывают дикое раздражение.
В отделе продаж мне предложили забрать компьютер через 2 дня (хорошо, что у меня ноутбук есть!)… С 12 до 17. И это относится к третьему пункту. Удобна мне такая доставка? В рабочее то время? Конечно же, нет. Ладно, что я работаю с web приложениями, я могу отпроситься и поработать из дома. Но многих ли так же легко отпустят с работы? Это на самом деле очень важный пункт, ведь у таких компаний часто Заказчики – те, кто работают, не могут сами отремонтировать и довезти. Поэтому удобное время доставки, как, например, с 12 до 16 или с 16 до 19 на выбор – огромный плюс в работе.
Но чего же я хочу во втором пункте, если учесть, что стенания на тему «почему я должна платить, если вещь на гарантии» необоснованны?  
Где же я прочитала эту умную мысль… Что надо копать глубже. Пытаться разобраться, какую проблему хочет решить ваш заказчик. (Например, заказывает сайт «типа ВКонтакте», а хочет, если копнуть, совсем другое) То есть надо не только знать, какие у него требования, но и зачем. Какую проблему он хочет решить с помощью вашей команды. И тогда вам не придется потом переделывать все.
И если вы сделаете это – если разберетесь в проблеме Заказчика, а не просто выполните то, что вам сказали, то обретете себе благодарного клиента, замечательную репутацию и прочие фишечки. О вас сформируется мнение, как о профессионалах. В любом случае, Заказчику будет приятно, что вы интересуетесь его проблемой, а не отмахиваетесь.
Как еще одна зарисовка отношения Заказчика. Когда я перешла на выделенку со Стрима, то все было хорошо. Скорость, пинг и так далее. Но потом мне понадобилось подлючиться по vpn к рабочему сайту. А так как делала я это впервые, то была немного не готова к обрыву остальных соединений. В итоге – паника, нет сети. Раньше все понятно было, ХР, модемчик. Перезагрузил его и нет проблем. Или сеть переподлючил. А тут – как? Звоню в техподдержку. Мне отвечают, что это «ой, там сложно, маршрутизацию настроить и тд». В общем, оплатите 1к за выезд специалиста и он приедет к вам после выходных. После выходных? Да вы что, как я без интернета??
Стала обзванивать друзей и за 5 минут наводящих комментариев мы нашли значки сетей в седьмой винде (кто же знал, что он в настройке адаптера) и выяснили, что, чтобы вернуть мне интернет, достаточно было нажать там «подлючить». Круто, да? За пару кликов мышкой деньги сдирать… А ведь я ситуацию обрисовывала – КАК у меня пропал интернет, после подключения по  vpn. И специалисты техподдержки вполне могли подсказать мне проверить именно состояние сети. Но… Не захотели, видимо.
Тем не менее, как провайдер меня они устраивают, за почти год сотрудничества обрывы связи можно по пальцам пересчитать, и подлючается интернет обратно буквально за секунды (а не как Стрим, по 5 минут лампочка моргала, что особенно критично, когда «там» 24 человека ждут своего Рейд Лидера). Я даже советую его знакомым! Но. Если мне надо звонить им в техподдержку, бастует все мое существо. Я всячески отлыниваю и уговариваю кого-нибудь мне в этом помочь))) Потому что у меня уже отпечаталось в мозгах, что мне не помогут, только деньги попробуют содрать. Но так как мы почти не пересекаемся (вот разве что когда комп первый раз сдох, а вай-фая еще не было, звонили мак-адрес перенастроить), то и сотрудничаем нормально. А если бы они делали для меня софт, осталась бы я их Заказчиком?
Ну и вернемся к проблеме с компьютером. Я лично считаю, что на мою проблему начихали. Ведь у них и в прошлый раз комп завелся сразу. Без последовавшего тестирования. А у меня – когда его хотели забирать обратно под девизом «и правда не включается». И вчера я звонила, опять говорила, что мне в общем-то все равно, если он у них сразу заведется. Мне надо, чтобы он завелся У МЕНЯ!
Вот мелькала же умная мысль у мастера, приехать и посмотреть на месте. Вот это был бы сервис. Это было бы решением проблемы. Ведь моя проблема была не протестировать профилактически. А чтобы он у меня заработал. Дома! А не где-то там еще. Тут и причину искать надо на месте. Да, может, там вообще с розеткой проблемы, непонятно, правда, почему он тогда внезапно заработал почти на месяц.
Но. Проблема была озвучена, а в качестве решения предложено только лишь «Ну мы у себя второй раз посмотрим, если все будет ОК, значит, все в порядке, а то, что он у вас не работает – не наши проблемы». Какой-то неправильный подход… Я бы лучше те же деньги «за доставку» за выезд мастера на дом отдала, если бы он был заинтересован помочь мне найти и устранить проблему!
А если нет заинтересованности в клиенте, то и клиент не заинтересован в сервисе, увы.

пятница, 18 ноября 2011 г.

"Бага не повторяется!", сказал программист, не читая условия

Навеяно разбором кейса от Александра Орлова.
Очень понравился третий пункт - мягко провести диалог, повернув его в нужное тебе русло. Не каждый так умеет. У меня бы первой реакцией было нахамить в ответ на хамство :)) А у вас?

Предлагаю разобрать кейс тестировщиков.
Думаю, вам будет знакома ситуация.

Она меня, если честно, вообще в шок повергла ))))
Итак, есть права доступа - "право 1" и "право 2", созвучные, но разные.
Есть элемент, который открывается из "места 1" и "места 2".

Находим ошибку, заводим:
"Выбрав право 1, переходим на элемент из места 1... *описание ошибки*
При этом если перейти к элементу из места 2, все будет ОК".

По баге прилетает вопрос - как же так, она не повторяется. Меняю права, так как работаю уже с другим - все повторяется. Опять вопрос: "Нет, вот, я ставлю право 2 и ...". "Конечно, не повторяется, в описании совсем другая роль выбрана".

ОК, передаем разработчикам. Бага возвращается с комментарием "не воспроизводится". Опять лезу, выполняю предварительные шаги (ну а вдруг и правда не воспроизводится, всякое бывает, была бага, потом раз и нету, потому что ее поправили, делая другое). Да все же повторяется. Помня о первом сомнении, отписываюсь "Все повторяется. Проверь, то ли право ты выбрал и из того ли места перешел". То есть даже дается подсказка, где человек мог ошибиться и неверно прочитать.

Нет, не повторяется и точка. В доказательство прикрепляется линк... На элемент, открытый из места 2 -_-
Хотя это специально было оговорено в теле баги + в комментариях )))))

Итак! Как вы ведете себя в таких ситуациях?

Нет, я не спорю, бывает и так, что меня не понимают без рисунков, потому что ошибку сложно описать словами, но бывает же и так, когда просто не читают...

Я пока выбрала звонок в скайпе. Ну и по возможности больше визуализации))) То есть рисунков. Правда, в данном примере я все же настаиваю на точном (и коротком! Там не было захламления текстом, в результате чего может возникнуть недопонятость) описании, к которому рисунки излишни.

четверг, 10 ноября 2011 г.

LogonDialogHandler VS Windows 7 (Решение в Watin)

Заметки юного автоматизатора... Так уж получилось, что свои тесты я синхронизирую между тремя компами - рабочий ноутбук (ХР), домашний ноутбук (Vista) и домашний комп (Win7). Компьютер у меня очень "вовремя" полетел, так что поставила студию и на домашний ноут. Проблем с двумя ноутбуками не было никаких - все хорошо, все круто, все работает. А потом мне вернули комп... У вас тоже Windows 7? И вы хотите начать автоматизацию? Тогда честно вам скажу, семерка - зло!

Нет. Не так.

Windows 7 - ЗЛО!!! Особенно для начинающих автоматизаторов, которые в код то круглыми глазами смотрят, "ой, а что это?", а тут еще идеально работающий код валится на первой же стадии.

Да да, это страшное слово "Залогиниться". При моих попытках освоить TestComlete я, кстати, семерку так и не победила. Неуверенно тыкаясь в кнопочку рекорда и осторожно корректируя полученный скрипт до понятного, я была страшно огорчена тем, что прекрасно работающие тесты на ХР не запускаются дома. Вообще. Ведь для любого теста надо вначале залогиниться... А он не видит найденный ранее Alias. Пыталась перезаписать скрипт, найти окно логина семерки. Но проиграла этот раунд)))

Потом у меня кончилась триал-версия, так что больше я TestComlete не занималась, и как обойти окно логина там, я не знаю.

Едем дальше. Watin, VS 2010, C#. Все хорошо, все здорово. Запись логина:

browser.DialogWatcher.Add(new LogonDialogHandler(@"login", "password"));

На семерке запускаю - вводит логин и пароль в строку логина, причем упорно так вводит, раз 20 ввел, пока скрипт не остановила. Пошла за помощью к программистам. Посидели, погуглили. Нашли обход.

Делаем так. В панели инструментов у нас есть такая штучка, как Debug, если нет, вытаскиваем ее туда:




Открываем выпадающий список - Configuration Manager. А теперь угадайте, где в этом менеждере кнопка "добавить новую конфигурацию" )))))

Там снова открываем выпадающий список "Active solution configuration " и находим завестную кнопочку "new". Создаем себе "WIN7 Debug"

Потом открываем свойства проекта - закладку Build и вводим в поле Conditional compilation symbols "WIN7"

Сохраняем конфигурацию. Прекрасно, теперь у нас есть 2 одинаковых конфигурации, которые различаются только наличием этих символов.

Переписываем ту строку кода в:

#if
WIN7 Browser.DialogWatcher.Add(new Windows7LogonDialogHandler(@"login", "password"));
#else
Browser.DialogWatcher.Add(new LogonDialogHandler(@"login", "password"));
#endif

Но и это еще не все! Создаем новый класс, пишем туда большой и страшный код, который я приведу внизу, а то не вижу тут тега спойлера. Класс называем "Windows7LogonDialogHandler .cs"
К нему то наша строчка и будет обращаться. Далее все просто. Если запускаем с ХР или Висты - конфигурацию выбираем "Debug", если с семерки - "WIN7 Debug". И все работает!

Ага. Щазззз. Проблемы могут и не кончиться)) Итак, мы прогуглили это дело, нашли тот скрипт для класса "Windows7LogonDialogHandler .cs" , который будет ниже, запустили (у программиста моего тоже семерка на рабочем компе) - работает! Ура?

Прихожу домой, запускаю - открывает окошко логина и... Ничего туда не вводит. Ну хоть не вбивает логин и пароль, как сумашедший, и то хлеб... Но блин, неудобно же! На компе фильмы смотреть, в игры играть и тд и тп, а как поработать надо - ноутбук включать. Одно дело, когда ты там тесты запустил и сидишь себе, играешься на основном компьютере. А когда ты туда лезешь их писать... Согласитесь, неприятно.

Прихожу на работу. Снова копируем мой проект (мои компы его через Dropbox получают, чтобы мне с флешкой каждый день не бегать), ставим у программиста на семерке - работает! Прихожу домой - не работает :(

Подключаю товарищей, дебажим код и что выясняется? У коллеги англ семерка, а у меня - русская. Поменяла в коде три названия, если у вас англ семерка, вам надо будет сменить "Другая учетная запись", "Пользователь" и "Пароль" на англ наименования... А я надеюсь, что мне не придется запускать свои тесты на английской семерке )))))

Хотя надо что-то придумать с этим. Нехорошо. Можно просто еще одну конфигурацию, в принципе, сделать... Надо ли? Ладно, посмотрим. Надеюсь, что когда вы начнете изучать автоматизацию, то проблему логина вы быстро обойдете, уже зная решение :))  А так в принципе это пока единственная проблема семерки, которую я знаю. Дальше все пойдет хорошо, главное, залогиниться!

Собственно, скрипт для русской версии:

using System.Linq;
using System.Windows.Automation;
using WatiN.Core.DialogHandlers;
using WatiN.Core.Native.Windows;


namespace UIModel
{

public class Windows7LogonDialogHandler : BaseDialogHandler{
{

private readonly string _username;
private readonly string _password;
AndCondition _conditions = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window));
readonly AndCondition _listCondition = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ListItem));
readonly AndCondition _editCondition = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));
readonly AndCondition _buttonConditions = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button));

public Windows7LogonDialogHandler(string username, string password)
{
_username = username;
_password = password;
}
public override bool HandleDialog(Window window)
{
if (CanHandleDialog(window))
{
var win = AutomationElement.FromHandle(window.Hwnd);
var lists = win.FindAll(TreeScope.Children, _listCondition);
var buttons = win.FindAll(TreeScope.Children, _buttonConditions);
var another = (from AutomationElement list in lists
where list.Current.ClassName == "UserTile"
where list.Current.Name == "Другая учетная запись"
select list).First(); another.SetFocus();
foreach (var edit in from AutomationElement list in lists
where list.Current.ClassName == "UserTile"
select list.FindAll(TreeScope.Children, _editCondition)
into edits
from AutomationElement edit in edits
select edit)

{
if (edit.Current.Name.Contains("Пользователь"))
{
edit.SetFocus();

var usernamePattern = edit.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;
if (usernamePattern != null) usernamePattern.SetValue(_username);
}


if (edit.Current.Name.Contains("Пароль"))
{
edit.SetFocus();
var passwordPattern = edit.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;
if (passwordPattern != null) passwordPattern.SetValue(_password);
}
}

foreach (var submitPattern in from AutomationElement button in buttons
where button.Current.AutomationId == "SubmitButton"

select button.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern)
{
submitPattern.Invoke();
break;
}

return true;
}
return false;
}

public override bool CanHandleDialog(Window window)
{
return window.ClassName == "#32770";
}
}
}