{"id":6443,"date":"2024-05-21T05:00:00","date_gmt":"2024-05-21T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=6443"},"modified":"2024-05-21T09:53:18","modified_gmt":"2024-05-21T07:53:18","slug":"robot-framework-wprowadzenie-do-automatyzacji-testow-aplikacji-webowej","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/robot-framework-wprowadzenie-do-automatyzacji-testow-aplikacji-webowej\/","title":{"rendered":"Robot Framework \u2013 wprowadzenie do automatyzacji test\u00f3w aplikacji webowej"},"content":{"rendered":"\n<p>Robot Framework to ciekawe narz\u0119dzie, kt\u00f3re mo\u017ce nam pom\u00f3c zautomatyzowa\u0107 testy w r\u00f3\u017cnych projektach. W tym artykule chcia\u0142bym je opisa\u0107 i pokaza\u0107 jego zastosowanie w automatyzacji aplikacji webowej.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:20%\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"216\" height=\"279\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/bitmoji-20181212115512-2.png\" alt=\"Awatar przedstawiaj\u0105cy autora tekstu.\" class=\"wp-image-20266\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/bitmoji-20181212115512-2.png 216w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/bitmoji-20181212115512-2-170x220.png 170w\" sizes=\"(max-width: 216px) 100vw, 216px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:80%\">\n<p><span style=\"font-weight: 400;\"><\/span>Dzie\u0144 dobry \ud83d\ude42 Czasem w \u017cyciu pocz\u0105tkuj\u0105cego testera s\u0142owa takie jak: automatyzacja, Selenium, programowanie mog\u0105 wywo\u0142a\u0107 strach i lekk\u0105 panik\u0119. Dlatego wydaje mi si\u0119, \u017ce wspomniane wy\u017cej narz\u0119dzie mo\u017ce by\u0107 dobre do rozpocz\u0119cia przygody z automatyzacj\u0105.<\/p>\n\n\n\n<p>Niedawno natkn\u0105\u0142em si\u0119 na ciekawy projekt Robot Framework (w dalszej cz\u0119\u015bci b\u0119d\u0119 je nazywa\u0107 Robot). Postaram si\u0119 Robota zaprezentowa\u0107 na przyk\u0142adzie testu logowania do poczty Onet.pl.<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>Artyku\u0142 zosta\u0142 opublikowany 30.01.2019, a <strong>zaktualizowany 22.06.2022 oraz 21.05.2024.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-weight: 400;\"><strong>Czego dowiesz si\u0119 z artyku\u0142u?<\/strong><\/span><\/h2>\n\n\n\n<p>Z przygotowanego przeze mnie wpisu dowiesz si\u0119 jak:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\"><img decoding=\"async\" class=\" wp-image-6458 alignright\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Robot-framework-logo-1.png\" alt=\"\" width=\"128\" height=\"128\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Robot-framework-logo-1.png 400w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Robot-framework-logo-1-150x150.png 150w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Robot-framework-logo-1-300x300.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Robot-framework-logo-1-90x90.png 90w\" sizes=\"(max-width: 128px) 100vw, 128px\" \/>zainstalowa\u0107 <strong>Pythona<\/strong> i biblioteki za pomoc\u0105 polecenia <strong>pip,<\/strong><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">zainstalowa\u0107 <strong>Robot Framework<\/strong> wraz z potrzebnymi bibliotekami,<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">skonfigurowa\u0107 pierwszy test automatyczny,<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">napisa\u0107 \u0142atwy przypadek testowy z wykorzystaniem Robot Framework,<\/span><\/li>\n\n\n\n<li>za pomoc\u0105 konsoli cmd oraz Excela usprawni\u0107 swoj\u0105 prac\u0119,<\/li>\n\n\n\n<li>uruchomi\u0107 przygotowany test.<\/li>\n<\/ul>\n\n\n\n<p>Automatyzacja test\u00f3w jest jedn\u0105 ze \u015bcie\u017cek rozwoju testera i jest obecnie bardzo popularna. Nawet moja kotka o imieniu Kimci stara si\u0119 opanowa\u0107 t\u0119 wiedz\u0119 i czyta bran\u017cowe ksi\u0105\u017cki na temat automatyzacji test\u00f3w, a ostatnio zacz\u0119\u0142a si\u0119ga\u0107 po ksi\u0105\u017ck\u0119 o Java.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/20181212_160606_0001.png\"><img decoding=\"async\" width=\"1024\" height=\"840\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/20181212_160606_0001-1024x840.png\" alt=\"Czarny kot w\u015br\u00f3d bran\u017cowych ksi\u0105\u017cek.\" class=\"wp-image-6449\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/20181212_160606_0001-1024x840.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/20181212_160606_0001-300x246.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/20181212_160606_0001.png 1316w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-weight: 400;\"><strong>Czemu ten framework zrobi\u0142 na mnie takie wra\u017cenie?<\/strong><\/span><\/h2>\n\n\n\n<p>Narz\u0119dzie to jest bardzo zaawansowane i mo\u017cna je u\u017cy\u0107 w r\u00f3\u017cnych projektach. Framework ten posiada wiele wbudowanych bibliotek, a tak\u017ce umo\u017cliwia skorzystanie z zewn\u0119trznych. Dzi\u0119ki duetowi Robot + Appium przeprowadzisz testy na urz\u0105dzeniach mobilnych. Robot pomo\u017ce Ci tak\u017ce wykona\u0107 testy REST API oraz baz danych. Nic nie stoi na przeszkodzie, by w projekcie Continuous Integration wykorzysta\u0107 na przyk\u0142ad Jenkins.<\/p>\n\n\n\n<p>Robot pozwoli\u0142 mi w \u0142atwy spos\u00f3b stworzy\u0107 test automatyczny i przy okazji umo\u017cliwi\u0142 mi, <span style=\"font-weight: 400;\">bez pos\u0142ugiwania si\u0119 zewn\u0119trznymi frameworkami lub bibliotekami, uzyskanie raportu z wynikami test\u00f3w w przyst\u0119pnej formie.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Moim zdaniem framework ten jest te\u017c przydatny ze wzgl\u0119d\u00f3w biznesowych, aby napisa\u0107 w \u0142atwy spos\u00f3b test z wykorzystaniem j\u0119zyka naturalnego (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Keyword-driven_testing\" rel=\"nofollow\" >Keyword-driven<\/a>) oraz oczywi\u015bcie w Robot Framework mo\u017cna skorzysta\u0107 z konstrukcji BDD&nbsp; when, given, then.<\/span><\/p>\n\n\n\n<p>Ca\u0142a magia tego narz\u0119dzia polega na tym, \u017ce my do niego &#8222;m\u00f3wimy&#8221;&nbsp;po angielsku (mo\u017cna tak\u017ce po niemiecku i hiszpa\u0144sku), a gdy wykonujemy test to <strong>framework nasze polecenia zamienia na odpowiedni kod<\/strong>.<\/p>\n\n\n\n<p>Wi\u0119cej mo\u017cesz dowiedzie\u0107 si\u0119 <a href=\"http:\/\/robotframework.org\/\" rel=\"nofollow\" >na stronie projektu Robot Framework.<\/a><\/p>\n\n\n\n<p>Projekt jest ci\u0105gle rozwijany w co anga\u017cuje si\u0119 wielu u\u017cytkownik\u00f3w. Je\u017celi natrafisz na jakie\u015b problemy lub b\u0119dziesz chcia\u0142 si\u0119 spyta\u0107 o rzeczy zwi\u0105zane z tym narz\u0119dziem, mo\u017cesz to zrobi\u0107 za pomoc\u0105 <a href=\"http:\/\/groups.google.com\/group\/robotframework-users\" rel=\"nofollow\" >listy mailingowej<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Instalacja<\/strong><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">Najpierw nale\u017cy zainstalowa\u0107 <a href=\"https:\/\/www.python.org\/downloads\/\" rel=\"nofollow\" >Pythona<\/a> i pami\u0119ta\u0107 o opcji Add to Path:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"729\" height=\"448\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/python.png\" alt=\"Printscreen z instalacji Python 3.6.4. Wyr\u00f3\u017cniony jest checkbox Add Python 3.6 to PATH.\" class=\"wp-image-6450\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/python.png 729w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/python-300x184.png 300w\" sizes=\"(max-width: 729px) 100vw, 729px\" \/><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Nast\u0119pnie instalujemy framework korzystaj\u0105c z konsoli cmd:<\/span><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npip install robotframework\n<\/pre><\/div>\n\n\n<p><span style=\"font-weight: 400;\">W naszym projekcie b\u0119dziemy korzysta\u0107 z biblioteki SeleniumLibrary, dlatego t\u0105 bibliotek\u0119 te\u017c musimy zainstalowa\u0107:<\/span><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npip install robotframework-seleniumlibrary\n<\/pre><\/div>\n\n\n<p>Do pisania naszego testu polecam <a href=\"https:\/\/www.jetbrains.com\/pycharm\/download\/#section=windows\" rel=\"nofollow\" >PyCharm<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wykorzystanie<\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">Teraz mo\u017cemy zaczyna\u0107 \ud83d\ude42 Na pocz\u0105tku, dla por\u00f3wnania, chcia\u0142bym pokaza\u0107 kod testu do logowania do poczty z wykorzystaniem Pythona i behave (prawa strona) oraz w Robot Framework (lewa strona).<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"1024\" height=\"513\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Porownanie-1024x513.png\" alt=\"Por\u00f3wnanie kodu\" class=\"wp-image-6453\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Porownanie-1024x513.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Porownanie-300x150.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Porownanie.png 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Zaczniemy od utworzenia i skonfigurowania naszego skryptu. W tym celu tworzymy nowy plik z rozszerzeniem *.robot<br>PyCharm powinien automatycznie zaproponowa\u0107 instalacj\u0119 wtyczek zwi\u0105zanych z tym frameworkiem. W moim przypadku PyCharm zaproponowa\u0142 instalcj\u0119 plugin\u00f3w pokazanych poni\u017cej:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"748\" height=\"611\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/plugin.png\" alt=\"Wtyczki zaproponowane przez PyCharm: IntelliBot SeleniumLibrary Patched oraz Robot Framework Support.\" class=\"wp-image-6454\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/plugin.png 748w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/plugin-300x245.png 300w\" sizes=\"(max-width: 748px) 100vw, 748px\" \/><\/figure>\n\n\n\n<p><br>Jako \u017ce test b\u0119dzie sprawdza\u0142 logowanie do Poczty Onet.pl, utworzy\u0142em plik Onet.robot.<\/p>\n\n\n\n<p>Nast\u0119pnie tworzymy nasz test wykorzystuj\u0105c&nbsp;dost\u0119pne sekcje:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><span style=\"color: #339966;\">*** Settings ***<\/span><\/td><td>wykorzystywana do konfiguracji i ustawie\u0144<\/td><\/tr><tr><td><span style=\"color: #339966;\">*** Varibles ***<\/span><\/td><td>wykorzystywana do przechowywania zmiennych<\/td><\/tr><tr><td><span style=\"color: #339966;\">*** Test cases ***<\/span><\/td><td>wykorzystywana do tworzenia przypadk\u00f3w testowych<\/td><\/tr><tr><td><span style=\"color: #339966;\">*** Keywords ***<\/span><\/td><td>wykorzystana do definiowania czynno\u015bci&nbsp;dla danego kroku<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dlatego zaczniemy w sekcji ustawie\u0144 od zaimportowania biblioteki, z kt\u00f3rej b\u0119dziemy w naszym te\u015bcie korzysta\u0107.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n*** Settings ***\nLibrary SeleniumLibrary\n<\/pre><\/div>\n\n\n<p><span style=\"font-weight: 400;\">W sekcji Settings mamy mo\u017cliwo\u015b\u0107 ustawienia bibliotek, z kt\u00f3rych korzystamy. List\u0119 dost\u0119pnych bibliotek znajdziesz <a href=\"http:\/\/robotframework.org\/#libraries\" rel=\"nofollow\" >tutaj.<\/a><\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Sekcja <strong>Variables<\/strong> s\u0142u\u017cy do ustawienia naszych zmiennych. Jak zobaczysz w zmiennej <strong>Browser<\/strong> wystarczy wpisa\u0107 tylko Chrome. Oczywi\u015bcie w takim przypadku odpowiednie drivery musz\u0105 znajdowa\u0107 si\u0119 w katalogu projektu (<a href=\"https:\/\/eur05.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fgithub.com%2Frobotframework%2FSeleniumLibrary%23browser-drivers&amp;data=05%7C02%7Cdbaldyga%40sii.pl%7Ce7330a83847a4ed857a808dc674b65ed%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C638498820754309428%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&amp;sdata=01vn0hSEoWVNPpC7DI627PhsnHE85sFTFUqnvXAeJsI%3D&amp;reserved=0\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >GitHub &#8211; robotframework\/SeleniumLibrary: Web testing library for Robot Framework<\/a><\/span>)<span style=\"font-weight: 400;\">. Je\u017celi chcieliby\u015bmy uruchomi\u0107 test w innej przegl\u0105darce, wystarczy wpisa\u0107 jej nazw\u0119.<\/span><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n*** Settings ***\nLibrary  SeleniumLibrary\n \n*** Variables ***\n${LOGIN URL}          http:\/\/www.poczta.onet.pl\/\n${BROWSER}      Chrome\n@{list} =  Niepoprawny e-mail lub has\u0142o.   Wprowad\u017a poprawne dane.\n<\/pre><\/div>\n\n\n<p>Dla por\u00f3wnania odpowiedni kod w Javie wygl\u0105da\u0142by tak:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nimport org.openqa.selenium.WebElement;\nimport org.openqa.selenium.chrome.ChromeDriver;\n \npublic class Onet {\n \npublic static void main(String&#x5B;] args) {\n \nSystem.setProperty(\"webdriver.chrome.driver\", \"G:\\\\Selenium\\\\chromedriver.exe\");\n \nChromeDriver driver = new ChromeDriver();\n<\/pre><\/div>\n\n\n<p>W j\u0119zykach programowania, na przyk\u0142ad Java czy Python, aby uruchomi\u0107 test w innej przegl\u0105darce, za ka\u017cdym razem musia\u0142by\u015b zaimportowa\u0107 w\u0142a\u015bciwe biblioteki i wskaza\u0107 odpowiedni driver. <strong>R\u00f3\u017cnic\u0119 wida\u0107 bardzo wyra\u017anie.<\/strong><\/p>\n\n\n\n<p>W Robot Framework nie ma takiej potrzeby. Dodatkowo, w \u0142atwy spos\u00f3b mo\u017cna tak napisa\u0107 skrypt, \u017ce przed testem Robot spyta si\u0119, w jakiej przegl\u0105darce uruchomi\u0107 ma test.<a href=\"https:\/\/github.com\/anditpl\/Onet-robotframeworktest\" rel=\"nofollow\" > Rozwi\u0105zanie to znajdziesz w moim projekcie na GitHubie.<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test cases i Keywords<\/h3>\n\n\n\n<p>Nast\u0119pnie&nbsp;<span style=\"font-weight: 400;\">mo\u017cemy przej\u015b\u0107 do sekcji Test cases.&nbsp;<\/span><span style=\"font-weight: 400;\">W tej sekcji ustawiamy kolejne kroki, kt\u00f3re b\u0119d\u0105 wykonywane. Kroki te musimy zdefiniowa\u0107 w sekcji <strong>Keywords<\/strong>.<\/span><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n*** Test Cases ***\nValid Login\nOpen main page\nRodo\nInput Username\nInput Password\nLogin button\nAssert Onet Mail\n&#x5B;Teardown]    Close Browser\n \nInvalid Login\nOpen main page\nRodo\nInput invalid login\nInput invalid password\nLogin button\nAssert invalid\n&#x5B;Teardown]  close browser\n<\/pre><\/div>\n\n\n<p><span style=\"font-weight: 400;\">Sekcja Keywords ogranicza si\u0119 do wskazania, co framework ma zrobi\u0107 w konkretnym przypadku z sekcji Test case. Wskazujemy w niej na przyk\u0142ad, jaka strona ma zosta\u0107 otworzona i nast\u0119pnie lokalizujemy elementy i wchodzimy w interakcj\u0119 z nimi. Oczywi\u015bcie, korzystamy z dobrze nam znanych <strong>lokalizator\u00f3w<\/strong> mi\u0119dzy innymi poprzez id, css, XPath.<\/span><\/p>\n\n\n\n<p><a href=\"https:\/\/www.guru99.com\/locators-in-selenium-ide.html\" rel=\"nofollow\" >Zamieszczam poradnik jak lokalizowa\u0107 elementy z wykorzystaniem Selenium<\/a>.<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Wiadomo, \u017ce za pomoc\u0105 <strong>asercji<\/strong> test powinien co\u015b sprawdza\u0107 oraz zweryfikowa\u0107, czy aplikacja zachowuje si\u0119 w oczekiwany spos\u00f3b.&nbsp;<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Asercja<\/h3>\n\n\n\n<p><a href=\"https:\/\/pl.wikipedia.org\/wiki\/Asercja_(informatyka)\" rel=\"nofollow\" ><strong>Asercja<\/strong> (ang. <em>assertion<\/em>)<\/a> czyli predykat (forma zdaniowa w danym j\u0119zyku, kt\u00f3ra zwraca prawd\u0119 lub fa\u0142sz), umieszczony w pewnym miejscu w kodzie. Asercja wskazuje, \u017ce programista zak\u0142ada, \u017ce predykat \u00f3w jest w danym miejscu prawdziwy. W przypadku gdy predykat jest fa\u0142szywy (czyli niespe\u0142nione s\u0105 warunki postawione przez programist\u0119), asercja powoduje przerwanie wykonania programu.<\/p>\n\n\n\n<p>Asercja ma szczeg\u00f3lne zastosowanie w trakcie testowania tworzonego oprogramowania np. dla sprawdzenia luk lub jego odporno\u015bci na b\u0142\u0119dy. Zalet\u0105 stosowania asercji jest mo\u017cliwo\u015b\u0107 sprawdzenia, w kt\u00f3rym fragmencie kodu \u017ar\u00f3d\u0142owego programu nast\u0105pi\u0142 b\u0142\u0105d.<\/p>\n\n\n\n<p>Jak wida\u0107 poni\u017cej u\u017cy\u0142em do tego konstrukcj\u0119 &nbsp;Title Should Be, Page should contain element oraz Should Contain Any.<\/p>\n\n\n\n<p><strong>Wa\u017cne! Kod strony logowania zmieni\u0142 si\u0119 znacz\u0105co od 2022 roku.<\/strong> <a aria-label=\"Aktualnie dzia\u0142aj\u0105cy mo\u017cna znale\u017a\u0107 na GitHubie (opens in a new tab)\" href=\"https:\/\/github.com\/anditpl\/Onet-robotframeworktest\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Aktualnie dzia\u0142aj\u0105cy mo\u017cna znale\u017a\u0107 na GitHubie<\/a>. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n*** Keywords ***\n \nOpen main page\nOpen browser    ${LOGIN URL}   ${BROWSER}\nTitle Should Be    Onet Poczta - najlepsza skrzynka pocztowa\nRodo\nwait until element is visible  css=button.cmp-button_button.cmp-intro_acceptAll\nClick Element  css=button.cmp-button_button.cmp-intro_acceptAll\nInput Username\nInput Text id=f_login validlogin@onet.pl\nInput password\nInput Text  id=f_password   validpassword\nLogin button\nclick element  css=input.loginButton\nAssert Onet Mail\npage should contain element  id=NewMail-button\nInput invalid login\nInput Text id=f_login  blednylogin@onet.pl\nInput invalid password\nInput Text  id=f_password   blednehaslo1\nAssert invalid\nwait until element is visible   class=messageContent\nget text  class=messageContent\nShould Contain Any ${list}    Niepoprawny e-mail lub has\u0142o.   Wprowad\u017a poprawne dane.\n<\/pre><\/div>\n\n\n<p>Dla przyk\u0142adu, gdy u\u017cytkownik poprawnie si\u0119 zaloguje powinien&nbsp;zobaczy\u0107 list\u0119 wiadomo\u015bci i m\u00f3c wys\u0142a\u0107 wiadomo\u015b\u0107 klikaj\u0105c&nbsp;przycisk &#8222;Napisz wiadomo\u015b\u0107&#8221;. Dlatego poprawne zalogowanie sprawdzamy poprzez weryfikowanie czy na stronie znajduj\u0119 si\u0119 element:&nbsp; <strong>id=NewMail-button<\/strong> poprzez s\u0142owa&nbsp;<strong> page should contain element<\/strong><\/p>\n\n\n\n<p>Z dokumentacji tego frameworku dowiesz si\u0119, z jakich keyword\u00f3w mo\u017cesz skorzysta\u0107. Tak wygl\u0105da lista keyword\u00f3w w bibliotece Selenium:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/keywords.png\"><img decoding=\"async\" width=\"1024\" height=\"138\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/keywords-1024x138.png\" alt=\"&quot;&quot;\" class=\"wp-image-6460\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/keywords-1024x138.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/keywords-300x40.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/keywords.png 1815w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Uruchamianie testu<\/h2>\n\n\n\n<p>Poni\u017cej przedstawiam kod zaktualizowany w 06.2022:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n*** Settings ***\nLibrary SeleniumLibrary\n \n*** Variables ***\n${LOGIN URL} http:\/\/www.poczta.onet.pl\/\n${BROWSER} Chrome\n@{list} = Niepoprawny e-mail lub has\u0142o. Wprowad\u017a poprawne dane.\n \n*** Test Cases ***\nValid email\nOpen main page\nRodo\nInput email\nClick Next\nInput Password\nLogin button\nAssert Onet Mail\n&#x5B;Teardown] Close Browser\n \nInvalid email\nOpen main page\nRodo\nInput invalid email\nClick Next\nAssert invalid email\n&#x5B;Teardown] close browser\n \nValid email and invalid password\nOpen main page\nRodo\nInput email\nClick Next\nInput invalid password\nLogin button\nAssert invalid password\n&#x5B;Teardown] Close Browser\n \n*** Keywords ***\n \nOpen main page\nOpen browser ${LOGIN URL} ${BROWSER}\nTitle Should Be Poczta Onet - Darmowa Poczta bez Op\u0142at\nRodo\nwait until element is visible\nclass=cmp-intro_acceptAll\nClick Element class=cmp-intro_acceptAll\nInput email\nInput Text id=email validemail@onet.eu\nClick Next\nClick Element xpath=\/\/*&#x5B;contains(text(),'Dalej')]\nInput password\nwait until element is visible id=password\nInput Text id=password validpassword\nLogin button\nclick element xpath=\/\/*&#x5B;contains(text(),'Zaloguj')]\nAssert Onet Mail\nwait until element is visible\nxpath=\/\/*&#x5B;contains(text(),'Napisz wiadomo\u015b\u0107')]\npage should contain element xpath=\/\/*&#x5B;contains(text(),'Napisz wiadomo\u015b\u0107')]\nInput invalid email\nInput Text id=email blednylogin@onet.pl\nInput invalid password\nwait until element is visible id=password\nInput Text id=password blednehaslo1\nAssert invalid email\nwait until element is visible\nxpath=\/\/*&#x5B;contains(text(),'Konto nie istnieje')]\npage should contain element\nxpath=\/\/*&#x5B;contains(text(),'Konto nie istnieje')]\nAssert invalid password\nwait until element is visible\nxpath=\/\/*&#x5B;contains(text(),'Nieprawid\u0142owe has\u0142o')]\npage should contain element\nxpath=\/\/*&#x5B;contains(text(),'Nieprawid\u0142owe has\u0142o')]\n<\/pre><\/div>\n\n\n<p>We wcze\u015bniejszej wersji artyku\u0142u mogli\u015bcie zapozna\u0107 si\u0119 z jego inn\u0105 wersj\u0105 (nieaktualn\u0105):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n*** Settings ***\nLibrary  SeleniumLibrary\n \n*** Variables ***\n${LOGIN URL}          http:\/\/www.poczta.onet.pl\/\n${BROWSER}      Chrome\n@{list} =   Niepoprawny e-mail lub has\u0142o.   Wprowad\u017a poprawne dane.\n \n*** Test Cases ***\nValid Login\nOpen main page\nRodo\nInput Username\nInput Password\nLogin button\nAssert Onet Mail\n&#x5B;Teardown]    Close Browser\n \nInvalid Login\nOpen main page\nRodo\nInput invalid login\nInput invalid password\nLogin button\nAssert invalid\n&#x5B;Teardown]  close browser\n \n*** Keywords ***\n \nOpen main page\nOpen browser    ${LOGIN URL}   ${BROWSER}\nTitle Should Be    Onet Poczta - najlepsza skrzynka pocztowa\nRodo\nwait until element is visible  css=button.cmp-button_button.cmp-intro_acceptAll\nClick Element  css=button.cmp-button_button.cmp-intro_acceptAll\nInput Username\nInput Text  id=f_login  validmail@onet.pl\nInput password\nInput Text  id=f_password   validpassword\nLogin button\nclick element  css=input.loginButton\nAssert Onet Mail\npage should contain element  id=NewMail-button\nInput invalid login\nInput Text  id=f_login  blednylogin@onet.pl\nInput invalid password\nInput Text  id=f_password   blednehaslo1\nAssert invalid\nwait until element is visible   class=messageContent\nget text  class=messageContent\nShould Contain Any  ${list} Niepoprawny e-mail lub has\u0142o.   Wprowad\u017a poprawne dane.\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Aktualizacja w czerwcu 2022<\/h3>\n\n\n\n<p>Aktualizacja w kodzie wynika\u0142a ze zmian, jakie zasz\u0142y w ci\u0105gu ostatnich 3 lat.&nbsp;Proces logowania do poczty zosta\u0142 zmieniony i obecnie przebiega w dw\u00f3ch etapach.<\/p>\n\n\n\n<p>Wcze\u015bniej w celu zalogowania aplikacja wymaga\u0142a podania e-maila oraz has\u0142a (na jednym ekranie logowania) oraz klikni\u0119cia w przycisk \u201eZaloguj\u201d. Teraz najpierw u\u017cytkownik musi poda\u0107 e-mail oraz klikn\u0105\u0107 przycisk Dalej. W tym momencie nast\u0119puje pierwszy etap weryfikacji \u2013 na przyk\u0142ad aplikacja sprawdza czy podane konto istnieje.<\/p>\n\n\n\n<p>W przypadku gdy konto jest poprawne, u\u017cytkownik przechodzi do ekranu z has\u0142em, za\u015b gdy konto jest nieprawid\u0142owe \u2013 wy\u015bwietlany jest komunikat b\u0142\u0119du.<\/p>\n\n\n\n<p>Nowe rozwi\u0105zanie pozwoli\u0142o mi na utworzenie trzech przypadk\u00f3w testowych:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>poprawny e-mail i poprawne has\u0142o \u2013 weryfikacja zalogowania,<\/li>\n\n\n\n<li>niepoprawny e-mail \u2013 weryfikacja komunikatu b\u0142\u0119du o nieprawid\u0142owym koncie,<\/li>\n\n\n\n<li>poprawny e-mail i niepoprawne has\u0142o \u2013 weryfikacja b\u0142\u0119du o nieprawid\u0142owym ha\u015ble.<span class=\"apple-converted-space\">&nbsp;<\/span><\/li>\n<\/ul>\n\n\n\n<p>W celu sprawdzenia kodu proponuj\u0119 za\u0142o\u017cenie konta i zast\u0105pienie w kodzie warto\u015bci \u201evalidemail\u201d na prawid\u0142owy adres oraz \u201evalidpassword\u201d na prawid\u0142owe has\u0142o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Aktualizacja maj 2024<\/h3>\n\n\n\n<p>Od czerwca 2022 w aplikacji zasz\u0142y kolejne zmiany. W celu posiadania kodu, kt\u00f3ry dzia\u0142a na dzie\u0144 15 kwietnia 2024, polecam skorzystania<a aria-label=\" (opens in a new tab)\" href=\"https:\/\/github.com\/anditpl\/Onet-robotframeworktest\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" > z repozytorium GitHub<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Uruchomienie testu<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">Teraz nie pozostaje nam nic innego jak uruchomi\u0107 nasz test. Je\u017celi wszystko dobrze zainstalowali\u015bmy powinni\u015bmy m\u00f3c to zrobi\u0107 z poziomu okna konsoli cmd lub za pomoc\u0105 wbudowanego Terminala w PyCharm:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"975\" height=\"504\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/cmd.png\" alt=\"Konsola cmd\" class=\"wp-image-6462\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/cmd.png 975w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/cmd-300x155.png 300w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/figure>\n\n\n\n<p>Wa\u017cne: u\u017cywaj\u0105c parametr\u00f3w, mo\u017cna modyfikowa\u0107 polecenie. Jako \u017ce przegl\u0105darka w naszym te\u015bcie jest zmienn\u0105, mo\u017cemy u\u017cy\u0107 polecenia:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nrobot -v BROWSER:Firefox Onet.robot\n<\/pre><\/div>\n\n\n<p>W takim przypadku nasz test zostanie uruchomiony w przegl\u0105darce Firefox.<\/p>\n\n\n\n<p>Mo\u017cemy tak\u017ce zmodyfikowa\u0107 folder, w kt\u00f3rym b\u0119d\u0105 przechowywane raporty i zrobimy to za pomoc\u0105 plik\u00f3w z rozszerzeniem *.bat<br>Tworzymy w tym celu w folderze projektu plik Test Firefox.bat i, korzystaj\u0105c np. z notatnika, umieszczamy w nim tekst:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nrobot -d firefox_results -v BROWSER:Firefox Onet.robot \n<\/pre><\/div>\n\n\n<p>Gdy go uruchomimy, test zostanie wykonany w przegl\u0105darce, a dodatkowo wynik testu zostanie zapisany w katalogu firefox_results (odpowiada za to parametr -d).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rozwi\u0105zanie pomocne testerowi<\/h2>\n\n\n\n<p>Teraz chcia\u0142bym pokaza\u0107, moim zdaniem, ciekawe rozwi\u0105zanie, kt\u00f3re mo\u017ce by\u0107 pomocne testerowi. Wyobra\u017amy sobie, \u017ce w naszym projekcie dostali\u015bmy dane u\u017cytkownik\u00f3w do logowania dla 100 os\u00f3b i, korzystaj\u0105c z naszego skryptu, mieliby\u015bmy dla wszystkich tych u\u017cytkownik\u00f3w sprawdzi\u0107 logowanie do poczty z poprawnymi danymi.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"295\" height=\"133\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/2018-12-13-10_12_07-Zeszyt1-Excel.png\" alt=\"Tabela sk\u0142adaj\u0105ca si\u0119 z dw\u00f3ch kolumn - adres\u00f3w mailowych u\u017cytkownik\u00f3w oraz hase\u0142.\" class=\"wp-image-6488\"\/><\/figure>\n\n\n\n<p>Hmmmm&#8230; jak to zrobi\u0107?&nbsp;? W naszym skrypcie musimy dokona\u0107 zmiany, kt\u00f3ra spowoduje, \u017ce nazwa u\u017cytkownika i has\u0142o b\u0119d\u0105 zmiennymi, czyli w sekcji Variables dodajemy:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n${username} = example@onet.pl\n${password} = password\n<\/pre><\/div>\n\n\n<p>Aby to zadzia\u0142o, musimy dokona\u0107 zmiany w keywords:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nInput Username\nInput Text id=f_login ${username}\nInput password\nInput Text id=f_password ${password}\n<\/pre><\/div>\n\n\n<p>Pozostaje nam doda\u0107 tag do naszego testu, kt\u00f3ry dzi\u0119ki odpowiedniemu poleceniu w cmd pozwoli uruchomi\u0107 ten konkretny przypadek testowy.<\/p>\n\n\n\n<p>Pod przypadkiem testowym dodajemy linijk\u0119:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nValid Login\n    &#x5B;Tags]  Valid\n<\/pre><\/div>\n\n\n<p>Dalej chcieliby\u015bmy, \u017ceby te dane zosta\u0142y zamienione w przydatne dla nas polecenie, kt\u00f3re mogliby\u015bmy u\u017cy\u0107 w konsoli a nast\u0119pnie w pliku *.bat<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wykorzystanie Ecxcela<\/h3>\n\n\n\n<p>Z pomoc\u0105 przyjdzie nam Excel \u2013 pot\u0119\u017cne narz\u0119dzie, kt\u00f3re moim zdaniem w codziennej pracy testera jest bardzo cz\u0119sto wykorzystywane i pomocne. Skorzystamy z formu\u0142y Z\u0141\u0104CZ.TEKST<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/06\/2018-12-13-10_15_44-Zeszyt1-Excel-1.png\"><img decoding=\"async\" width=\"1024\" height=\"176\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/06\/2018-12-13-10_15_44-Zeszyt1-Excel-1-1024x176.png\" alt=\"Excel, wykorzystanie formu\u0142y Z\u0141\u0104CZ.TEKST\" class=\"wp-image-20268\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/06\/2018-12-13-10_15_44-Zeszyt1-Excel-1-1024x176.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/06\/2018-12-13-10_15_44-Zeszyt1-Excel-1-300x52.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/06\/2018-12-13-10_15_44-Zeszyt1-Excel-1-768x132.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/06\/2018-12-13-10_15_44-Zeszyt1-Excel-1.png 1221w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Tworz\u0105c odpowiedni\u0105 formu\u0142\u0119 dla jednej kom\u00f3rki, korzystaj\u0105c z opcji przeci\u0105gania, jeste\u015bmy w stanie dla wszystkich nazw u\u017cytkownik\u00f3w i hase\u0142 stworzy\u0107 odpowiednie polecenie.<\/p>\n\n\n\n<p>Przyk\u0142adowe polecenie to:<\/p>\n\n\n\n<p>robot <strong>-i<\/strong> Valid <strong>-d<\/strong> results\\example1@onet.eu <strong>-v<\/strong> username:example1@onet.eu <strong>-v<\/strong> password:pass1234 Onet.robot<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><span style=\"color: #339966;\"><strong>-i<\/strong><\/span><\/td><td>wskazujemy nazw\u0119 przypadku testowego do uruchomienia zdefiniowana za pomoc\u0105 tagu<\/td><\/tr><tr><td><span style=\"color: #339966;\"><strong>-d<\/strong><\/span><\/td><td>definiujemy gdzie maj\u0105 by\u0107 przechowywane logi, raporty i zrzuty ekranu<\/td><\/tr><tr><td><span style=\"color: #339966;\"><strong>-v<\/strong><\/span><\/td><td>definiujemy zmienne<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wystarczy utworzy\u0107 plik <strong>*.bat<\/strong> i do niego wklei\u0107 warto\u015bci utworzone dzi\u0119ki formule Excela i go uruchomi\u0107.<\/p>\n\n\n\n<p>Je\u017celi uruchomimy plik bat, zostanie wykonany tylko przypadek logowania z tagiem &#8222;Valid&#8221;, a dodatkowo dla ka\u017cdego u\u017cytkownika zostanie stworzony osobny folder o nazwie u\u017cytkownika:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2018-12-13-10_29_24-results.png\"><img decoding=\"async\" width=\"1024\" height=\"285\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2018-12-13-10_29_24-results-1024x285.png\" alt=\"Lista folder\u00f3w nazwanych od adres\u00f3w mailowych oraz notatnik z wynikami.\" class=\"wp-image-20270\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2018-12-13-10_29_24-results-1024x285.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2018-12-13-10_29_24-results-300x83.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2018-12-13-10_29_24-results-768x214.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/2018-12-13-10_29_24-results.png 1338w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>W przypadku uruchomienia ponownie testu pliki raport\u00f3w i log\u00f3w zostan\u0105 nadpisane i b\u0119d\u0105 przechowywa\u0107 wyniki ostatniego testu.<\/p>\n\n\n\n<p>Warto wi\u0119c doda\u0107 do naszego polecenia -T (timestamp), odpowiadaj\u0105cy za to, \u017ce kolejne testy b\u0119d\u0105 zapisywane do oddzielnych plik\u00f3w z dat\u0105 i godzin\u0105 utworzenia raportu.<\/p>\n\n\n\n<p>Ca\u0142e polecenie b\u0119dzie wygl\u0105da\u0107 tak:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nrobot -i Valid -d results\\example1@onet.eu -v username:example1@onet.eu -v password:pass1234 -T Onet.robot\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Raport z test\u00f3w<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:10%\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"60\" height=\"77\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/Obraz2.png\" alt=\"&quot;&quot;\" class=\"wp-image-20272\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:90%\">\n<p><span style=\"font-weight: 400;\">Na ko\u0144cu testu jeste\u015bmy poinformowani, \u017ce Robot utworzy\u0142 dla nas raport i log z testu w plikach output.xml, log.html i report.html<\/span><\/p>\n<\/div>\n<\/div>\n\n\n\n<p><span style=\"font-weight: 400;\">Pami\u0119tam, \u017ce w przypadku Pythona i Behave, aby uzyska\u0107 raport, kt\u00f3ry dobrze by wygl\u0105da\u0142, musia\u0142em posi\u0142kowa\u0107 si\u0119 zewn\u0119trzn\u0105 bibliotek\u0105 Allure. <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Tutaj od razu otrzymujemy dobrze prezentuj\u0105cy si\u0119 raport z informacj\u0105 o powodach, dlaczego test nie przeszed\u0142. Robot dodatkowo w przypadku uzyskania FAIL automatycznie zrobi zrzut ekranu i do\u0142\u0105czy go do raportu.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"1024\" height=\"1005\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/raport-1024x1005.png\" alt=\"&quot;&quot;\" class=\"wp-image-6463\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/raport-1024x1005.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/raport-300x294.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/raport.png 1058w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p>Wydaje mi si\u0119, \u017ce po napisanym szybko i w \u0142atwy spos\u00f3b automatycznym te\u015bcie, tester mo\u017ce by\u0107 zadowolony i wieczorem zasn\u0105\u0107 z u\u015bmiechem na twarzy.<\/p>\n\n\n\n<p>Na zako\u0144czenie chcia\u0142bym pokaza\u0107 jak w praktyce wygl\u0105da test z u\u017cyciem Robot-a \ud83d\ude09<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"1913\" height=\"986\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/Robot.gif\" alt=\"Gif - Test w Robot Framework\" class=\"wp-image-6465\"\/><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Oczywi\u015bcie artyku\u0142 stanowi wprowadzenie do zastosowania frameworku w testerskim \u017cyciu codziennym. Narz\u0119dzie to bardzo przypad\u0142o mi do gustu. B\u0119d\u0119 stara\u0142 si\u0119 poszerzy\u0107 wiedz\u0119 na jego temat oraz rozwin\u0105\u0107 ten projekt o:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\"> zastosowanie w nim BDD,<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">zaczerpni\u0119cie danych do logowania z zewn\u0119trznego pliku Excela,<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">zmodyfikowanie testu, aby by\u0142 uruchamiany jednocze\u015bnie na kilku przegl\u0105darkach.<\/span><\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/github.com\/anditpl\/Onet-robotframeworktest\" rel=\"nofollow\" ><span style=\"font-weight: 400;\">Projekt ten znajdziesz na moim GitHubie.<\/span><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/smilies-bank-sit-rest-160739-300x200.jpeg\" alt=\"&quot;&quot;\" class=\"wp-image-6464\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/smilies-bank-sit-rest-160739-300x200.jpeg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/12\/smilies-bank-sit-rest-160739-1024x683.jpeg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><strong>Dzi\u0119kuj\u0119 za uwag\u0119 i \u017cycz\u0119 mi\u0142ego dnia \ud83d\ude42<\/strong><\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>A je\u015bli chcesz dowiedzie\u0107 si\u0119 wi\u0119cej, <a href=\"https:\/\/sii.pl\/blog\/przyklady-niezrozumienia-potrzeb-osob-z-niepelnosprawnoscia-i-jak-im-zaradzic-czesc-i\/\">jak jako programista i tester zaradzi\u0107 potrzebom os\u00f3b z niepe\u0142nosprawno\u015bci\u0105<\/a>, zach\u0119camy do lektury innego artyku\u0142u autora.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;6443&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;46&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.9&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;4.9\\\/5 ( votes: 46)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Robot Framework \u2013 wprowadzenie do automatyzacji test\u00f3w aplikacji webowej&quot;,&quot;width&quot;:&quot;136.6&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 136.6px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            4.9\/5 ( votes: 46)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Robot Framework to ciekawe narz\u0119dzie, kt\u00f3re mo\u017ce nam pom\u00f3c zautomatyzowa\u0107 testy w r\u00f3\u017cnych projektach. W tym artykule chcia\u0142bym je opisa\u0107 &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/robot-framework-wprowadzenie-do-automatyzacji-testow-aplikacji-webowej\/\">Continued<\/a><\/p>\n","protected":false},"author":190,"featured_media":14787,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":10,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[103,584,679,230,146],"class_list":["post-6443","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-autoamtyzacja-testow","tag-python","tag-robot-framework","tag-selenium","tag-testing"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/06\/Robot-Framework.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6443"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/190"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=6443"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6443\/revisions"}],"predecessor-version":[{"id":27746,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6443\/revisions\/27746"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/14787"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=6443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=6443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=6443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}