<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Selenium on jUst QA blog</title>
    <link>https://slavaqa.pp.ua/tags/selenium/</link>
    <description>Recent content in Selenium on jUst QA blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>uk</language>
    <lastBuildDate>Mon, 10 Nov 2014 12:13:16 +0200</lastBuildDate><atom:link href="https://slavaqa.pp.ua/tags/selenium/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Про тестовий фреймворк замовте слово&amp;#8230;</title>
      <link>https://slavaqa.pp.ua/posts/2014/11/10/do-not-forget-to-mention-a-test-framework/</link>
      <pubDate>Mon, 10 Nov 2014 12:13:16 +0200</pubDate>
      <guid>https://slavaqa.pp.ua/posts/2014/11/10/do-not-forget-to-mention-a-test-framework/</guid>
      <description>&lt;h2 id=&#34;для-тих-хто-хоче-але-боїться-автоматизації&#34;&gt;«Для тих, хто хоче, але боїться автоматизації»&lt;/h2&gt;
&lt;p&gt;Не знаю, як для кого звучить згадка про тестовий фреймворк, але для мене, перш ніж став «тісно» працювати над автоматизацією слова когось на конференції/у відео-уроці «Я написав свій тестовий фрейморк» викликали шанобливу повагу та «тремтіння у колінах». Що цілком легко зрозуміло було, оскільки знань з програмування та розуміння того, з чим доведеться працювати було замало і по суті фраза сприймалася як «я написав свій ще крутіший варіант Selenium».&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;для-тих-хто-хоче-але-боїться-автоматизації&#34;&gt;«Для тих, хто хоче, але боїться автоматизації»&lt;/h2&gt;
&lt;p&gt;Не знаю, як для кого звучить згадка про тестовий фреймворк, але для мене, перш ніж став «тісно» працювати над автоматизацією слова когось на конференції/у відео-уроці «Я написав свій тестовий фрейморк» викликали шанобливу повагу та «тремтіння у колінах». Що цілком легко зрозуміло було, оскільки знань з програмування та розуміння того, з чим доведеться працювати було замало і по суті фраза сприймалася як «я написав свій ще крутіший варіант Selenium».&lt;/p&gt;
&lt;p&gt;Гугління і вікіпедіння не дуже допомагало, тому що скрізь також зустрічалися визначення типу «програмний продукт», «набір бібліотек» тощо. Асоціативний ряд відразу виводив до деяких .dll файлів, які виникають якимось складним і фантастичним чином.&lt;/p&gt;
&lt;p&gt;Насправді все не так. Точніше, не так «складно та фантастично». У всіх (які мені зустрічалися) курси автоматизації тестування з використанням Selenium перші уроки починаються з навчання роботі з Selenium IDE. Можливо, зі зростанням популярності Selenium Builder курси починатимуть навчати працювати з ним – але це так, ліричний відступ. Так ось, перший скрипт з IDE є набором команд, які є реалізацією фреймворку Selenium/Webdriver. Якщо його зберегти, підпиляти – то, в принципі, можна з ним і надалі працювати. Але проблема полягає в тому, що доведеться далі в тестах використовувати одні й ті ж повторення команд, одні й ті самі переходи, одні й самі алгоритми, елементи на сторінці/у вікні тощо, і т.д. Це незручно, довго та нудно. Набагато швидше вирішити квадратне рівняння за формулою (згадуємо шкільний курс:)), ніж будувати на мілімітровці графіки щоразу.&lt;br&gt;
Тобто. насправді, “тестовий фрейморк” – це “конструктор, зроблений з конструктора”.&lt;br&gt;
Один простий приклад: натиснути кнопку «Зберегти».&lt;br&gt;
Можна завжди у тестах писати так:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;pre data-wpae=&amp;#34;lang:csharp;theme:github;&amp;#34; style=&amp;#34;background-color: #ddd;&amp;#34;&amp;gt;driver.FindElement(By.Id(&amp;#34;ctl00_A_btnSave&amp;#34;)).Click();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Але що робити, якщо таких записів «багато-багато», а треба щось змінити? Або змінилося (в самому Selenium) назва методу натискання на елемент (став не Click(), а ClickElement()), або змінився ID, або ще якесь або? Для цього локатор зберігається окремо (в описі сторінки для PageObject/елемента сторінки HtmlObject), метод описується окремо, а всередині знаходиться той самий&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;pre data-wpae=&amp;#34;lang:csharp;theme:github;&amp;#34; style=&amp;#34;background-color: #ddd;&amp;#34;&amp;gt;driver.FindElement(By.Id(locator)).Click();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;І так, малими «цеглинами», вибудовується оперування сторінками/вікнами/діалогами, а потім з цих «найбільших цеглинок» збираються тести. Що буде найважливішими моментами при початку роботи над «своїм дітищем» (що дозволить потім вийти на сцену на конференції з тестування і гордо випнувши груди сказати «я написав свій тестовий фреймворк»:))?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Розуміння плюсів/особливостей мови, якою писатиметься. Зі своїх граблів: перші спроби «автоматизувати» довелося викинути/переписувати через те, що тести об’єкто-орієнтованою мовою писалися «по-старому». І змусити працювати «того монстра Франкенштейна» вдалося, але через тоді «незрозумілі милиці».&lt;/li&gt;
&lt;li&gt;Знання патернів (шаблонів, прийомів) проектування для тестових фреймворків. В інтернатах інформації багато, можливо, трохи пізніше «напишу і своє велосипедне пояснення». Зараз просто напишу так: якщо не знаєш, що має вийти – то може взагалі щось нікому незрозуміле.&lt;/li&gt;
&lt;li&gt;Планування. Не можна автоматизувати відразу і все. Почніть із простих сценаріїв.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Кому як, а для мене добрим підходом здається наступний:&lt;br&gt;
а) написати тест-кейси «на папірці»&lt;br&gt;
б) перенести в тестовий проект у «командному» вигляді, тобто. не&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;pre data-wpae=&amp;#34;lang:csharp;theme:github;&amp;#34; style=&amp;#34;background-color: #ddd;&amp;#34;&amp;gt;driver.FindElement(By.Id(locator)).Click();

а

Site.OpenPage(page1);
Site.Page1.ButtonSavePresent();
Site.Page1.ButtonSaveClick();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;який природно не проходитиме, оскільки всі (або частина) ці методи ще реалізовані.&lt;br&gt;
в) реалізувати методи, виходячи з того, що OpenPage «глобальніший», а&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;pre data-wpae=&amp;#34;lang:csharp;theme:github;&amp;#34; style=&amp;#34;background-color: #ddd;&amp;#34;&amp;gt;Page1.ButtonSaveClick();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;стосується лише Page1. І ось якраз цей самий момент реалізацій пункту і буде «тестовим фреймворком автоматизації».&lt;br&gt;
г) підготувати “code convention”. Навіть якщо автоматизацією на проекті займатиметься одна людина – варто заздалегідь продумати певні правила, як саме писати як код тестів, так і код «конструктора». Бажано обговорити з програмістами, бо якщо знадобиться їхня порада, щоб не виявилося, що код «написаний на абсолютно різних діалектах однієї мови». (Елементарне: як ставити фігурні дужки? На цьому ж рядку відкривати – чи з наступного? Якщо можна «і так, і так».)&lt;/p&gt;
&lt;p&gt;Природно, у фреймоврк варто заздалегідь закладати репортинг/логування результатів/звітність. Якщо це нове для вас – то не варто одразу чекати побудови гарних графіків. Відразу варто пам’ятати, що кількість тестів буде не 10 і тестових оточень буде більше ніж одна, а значить Grid і паралельне виконання тестів наближається. Звичайно не варто «відразу писати тести по всьому»: покрийте базову функціональність, основні сценарії, а потім приступайте до детальніших перевірок «всього». Природно, що тестових даних буде багато, а значить один і той же сценарій працюватиме на багатьох наборах даних (які читатимуться їх файли, бази даних, генеруватимуться «на льоту» залежно від контексту). Роботи багато, часу на реалізацію займе багато, особливо якщо з мовою програмування «на Ви» (про те, яку мову вибрати – теж треба подумати заздалегідь: якщо не буде «під рукою» людини, з якою можна порадитись щодо реалізації, то робота може “встати”, ще не розпочавшись).&lt;/p&gt;
&lt;p&gt;Але недаремно є приказка «терпіння і працю все перетруть».&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Сум і смуток відхабреності</title>
      <link>https://slavaqa.pp.ua/posts/2013/09/03/sadness-of-being-nothabred/</link>
      <pubDate>Tue, 03 Sep 2013 11:21:33 +0300</pubDate>
      <guid>https://slavaqa.pp.ua/posts/2013/09/03/sadness-of-being-nothabred/</guid>
      <description>&lt;p&gt;Був той час, що дуже активно читав &lt;a href=&#34;https://habr.com/ru/all/&#34;&gt;Habrahabr&lt;/a&gt;, ділився думкою в коментарях… і в якийсь момент отримав мінус у карму. За що про що – як тоді не розібрався, і на час “затих” (ну а що, без карми – і ні плюсик поставити, ні профілем не похвалитися).&lt;/p&gt;
&lt;p&gt;Час минав… І схотілося виправити ситуацію. Хабр пропонує це зробити цілком законним шляхом: написати статтю та сподіватись на краще. Але якось все не вистачало ідей/знань/умінь/відкриттів… І тут потрапила на очі стаття з &lt;a href=&#34;https://seleniumhq.wordpress.com/2013/08/28/the-road-to-selenium-3/&#34;&gt;Офіційного блогу Селеніуму про плани на третю версію&lt;/a&gt;. Зважився ризикнути, перекласти (адже можна розміщувати переклади на Хабре) і опублікувати.&lt;br&gt;
Вирішено – зроблено. “Дрижачими руками” перед кліком на кнопку перевіряв “А раптом хтось уже, а що як виявиться дублікат”. Але… наче перший. І, несподівано для себе, потрапив одразу ж у &lt;a href=&#34;https://software-testing.ru/blogs&#34;&gt;блого-стрічку Software-testing.ru&lt;/a&gt; і їхнє &lt;a href=&#34;http://feeds.feedburner.com/RussianTestingBlogs50&#34;&gt;дзеркало&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;Був той час, що дуже активно читав &lt;a href=&#34;https://habr.com/ru/all/&#34;&gt;Habrahabr&lt;/a&gt;, ділився думкою в коментарях… і в якийсь момент отримав мінус у карму. За що про що – як тоді не розібрався, і на час “затих” (ну а що, без карми – і ні плюсик поставити, ні профілем не похвалитися).&lt;/p&gt;
&lt;p&gt;Час минав… І схотілося виправити ситуацію. Хабр пропонує це зробити цілком законним шляхом: написати статтю та сподіватись на краще. Але якось все не вистачало ідей/знань/умінь/відкриттів… І тут потрапила на очі стаття з &lt;a href=&#34;https://seleniumhq.wordpress.com/2013/08/28/the-road-to-selenium-3/&#34;&gt;Офіційного блогу Селеніуму про плани на третю версію&lt;/a&gt;. Зважився ризикнути, перекласти (адже можна розміщувати переклади на Хабре) і опублікувати.&lt;br&gt;
Вирішено – зроблено. “Дрижачими руками” перед кліком на кнопку перевіряв “А раптом хтось уже, а що як виявиться дублікат”. Але… наче перший. І, несподівано для себе, потрапив одразу ж у &lt;a href=&#34;https://software-testing.ru/blogs&#34;&gt;блого-стрічку Software-testing.ru&lt;/a&gt; і їхнє &lt;a href=&#34;http://feeds.feedburner.com/RussianTestingBlogs50&#34;&gt;дзеркало&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Дрібниця, здавалося б, а все ж приємно.&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
