{"id":8616,"date":"2019-12-20T14:30:36","date_gmt":"2019-12-20T13:30:36","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=8616"},"modified":"2025-05-07T12:13:21","modified_gmt":"2025-05-07T10:13:21","slug":"jak-dazyc-do-jakosci-z-uzyciem-tricentis-tosca-czesc-1","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/jak-dazyc-do-jakosci-z-uzyciem-tricentis-tosca-czesc-1\/","title":{"rendered":"Jak d\u0105\u017cy\u0107 do Jako\u015bci z u\u017cyciem Tricentis Tosca. Cz\u0119\u015b\u0107 1."},"content":{"rendered":"\n<p class=\"has-text-align-right\"><em><strong>Jako\u015b\u0107<\/strong> to doskona\u0142o\u015b\u0107,<\/em><br><em>&nbsp;kt\u00f3rej nie da si\u0119 osi\u0105gn\u0105\u0107,<\/em><br><em>lecz do kt\u00f3rej trzeba uporczywie zd\u0105\u017ca\u0107.<\/em><br><em><strong>Lao Tzu <\/strong><\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wst\u0119p<\/h2>\n\n\n\n<p>Mamy rok 2019, technologia, komputery, internet s\u0105 nieod\u0142\u0105cznymi elementami naszego \u017cycia. Pewnie niewielu z nas wyobra\u017ca sobie czasy gdy na wiadomo\u015b\u0107 czeka\u0142o si\u0119 kilka tygodni, podr\u00f3\u017ce zajmowa\u0142y miesi\u0105ce, a wiedza nie by\u0142a powszechna. Ludzie od zawsze usprawniaj\u0105 swoj\u0105 prac\u0119, aby nie traci\u0107 czasu, si\u0142, pieni\u0119dzy, a jednocze\u015bnie czerpa\u0107 z \u017cycia to co najlepsze.<\/p>\n\n\n\n<p>Rozw\u00f3j w ka\u017cdej bran\u017cy jest bardzo dynamiczny, przyspieszamy prac\u0119 z u\u017cyciem maszyn, automat\u00f3w, sztucznej inteligencji. D\u0105\u017cymy do szybkiego dostarczania us\u0142ug, oprogramowania, towar\u00f3w \u2013 wszystko po to \u017ceby zaoszcz\u0119dzi\u0107 czas, kt\u00f3rego mamy ograniczon\u0105 ilo\u015b\u0107 \u2013 \u015brednio ka\u017cdy z nas ma 25566 dni do dyspozycji z czego oko\u0142o 25 lat przesypiamy.<\/p>\n\n\n\n<p>Dzi\u0119ki dost\u0119pnym narz\u0119dziom o szerokim spektrum funkcjonalno\u015bci, jeste\u015bmy w stanie udoskonali\u0107 procesy, zwi\u0119kszy\u0107 wydajno\u015b\u0107 i efektywno\u015b\u0107 wykonywanych zada\u0144. Na podstawie dziedziny, kt\u00f3ra jest dla mnie najwa\u017cniejsza \u2013 Zapewnienia Jako\u015bci (eng. Quality Assurance) \u2013 chcia\u0142abym przedstawi\u0107 dwa r\u00f3\u017cne podej\u015bcia do automatyzacji test\u00f3w, czyli d\u0105\u017cenia do doskona\u0142o\u015bci w In\u017cynierii Oprogramowania.<\/p>\n\n\n\n<p>W cyklu artyku\u0142\u00f3w zaprezentuj\u0119 rozwi\u0105zanie <strong>Tricentis Tosca<\/strong> \u2013 narz\u0119dzie mniej popularne \u2013 za to w mojej opinii przysz\u0142o\u015bciowe oraz najcz\u0119\u015bciej stosowane podej\u015bcie do automatyzacji z u\u017cyciem <strong>Selenium WebDriver<\/strong>. &nbsp;Do analizy wykorzystany zostanie zautomatyzowany przypadek testowy: Wyszukanie oferty pracy na stronie <a href=\"http:\/\/www.sii.pl\">www.sii.pl,<\/a>&nbsp;przygotowany z u\u017cyciem dw\u00f3ch wspomnianych rozwi\u0105za\u0144.<\/p>\n\n\n\n<p class=\"has-text-align-left\">W kolejnych artyku\u0142ach b\u0119d\u0105 prezentowane poszczeg\u00f3lne etapy pisania skrypt\u00f3w automatycznych, m.in przygotowanie \u015brodowiska testowego, tworzenie podstaw i budowanie ca\u0142ego przypadku testowego. Zajrzymy w zakamarki utrzymywania skrypt\u00f3w, zg\u0142\u0119bimy tajniki zasilania danymi testowymi oraz poznamy meandry zarz\u0105dzania ryzykiem w projekcie. Na zako\u0144czenie poznamy wady i zalety oraz efektywno\u015b\u0107 prezentowanych narz\u0119dzi.<\/p>\n\n\n\n<p class=\"has-text-align-left\"><em>Zapraszam do lektury.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rozdzia\u0142 1 Jak wystartowa\u0107?<\/h2>\n\n\n\n<p>Pocz\u0105tki bywaj\u0105 trudne. Potrzeba miesi\u0119cy nauki i lat do\u015bwiadczenia, \u017ceby zacz\u0105\u0107 dobrze automatyzowa\u0107. Ogrom narz\u0119dzi, j\u0119zyk\u00f3w wspomagaj\u0105cych testy automatyczne, a przede wszystkim r\u00f3\u017cnorodno\u015b\u0107 technologii wykorzystywanych do tworzenia system\u00f3w i aplikacji, kt\u00f3re podlegaj\u0105 testom \u2013 <strong>SUT<\/strong> (System Under Test) \u2013 powoduje m\u0119tlik co wybra\u0107, jakie rozwi\u0105zanie wdro\u017cy\u0107, \u017ceby nie straci\u0107 czasu i pieni\u0119dzy, a zyska\u0107 Jako\u015b\u0107. Popularnym rozwi\u0105zaniem jest wykorzystywanie narz\u0119dzi darmowych np. Selenium WebDriver. Wi\u0105\u017ce si\u0119 to oczywi\u015bcie z ograniczeniami, s\u0105 te\u017c rozwi\u0105zania komercyjne, kt\u00f3re coraz cz\u0119\u015bciej zapewniaj\u0105 wsparcie wszystkich aktywno\u015bci testerskich.<\/p>\n\n\n\n<p>Zatem jak zacz\u0105\u0107 swoj\u0105 przygod\u0119 z automatyzacj\u0105?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tricentis Tosca<\/strong><\/h3>\n\n\n\n<p>Narz\u0119dzie to jest przeznaczone dla os\u00f3b mniej technicznych, nawet dla tych, kt\u00f3rym Python kojarzy si\u0119 z gatunkiem w\u0119\u017ca, a Java brzmi jak wyspa w Indonezji. Coraz cz\u0119\u015bciej d\u0105\u017cy si\u0119 do u\u0142atwie\u0144, kt\u00f3re pozwalaj\u0105 wej\u015b\u0107 do bran\u017cy IT nie tylko osobom studiuj\u0105cych arkana wiedzy tajemnej z tego obszaru.<\/p>\n\n\n\n<p>W przypadku narz\u0119dzi Tricentis mamy do czynienia z niskim progiem wej\u015bcia. Mog\u0119 \u015bmia\u0142o powiedzie\u0107, \u017ce jest to narz\u0119dzie \u201eEasy to Enter but Hard to Master\u201d, od &#8222;Zera do Bohatera&#8221; nie staniemy si\u0119 w jeden dzie\u0144, ale na pewno po nied\u0142ugim czasie (2, 3 dni \u2013 tyle zajmuje opanowanie szkolenia Automation Specialist Level 1) b\u0119dziemy w stanie efektywnie tworzy\u0107 testy automatyczne.<\/p>\n\n\n\n<p>Do podstawowej pracy z narz\u0119dziem do automatyzacji wystarczy zainstalowa\u0107 <strong>Tosca Commander<\/strong>.<\/p>\n\n\n\n<p>Dost\u0119p do 14 dniowego okresu pr\u00f3bnego znajduje si\u0119 pod adresem<\/p>\n\n\n\n<p><a href=\"https:\/\/www.tricentis.com\/software-testing-tool-trial-demo\/tosca-free-trial\/\" rel=\"nofollow\" >https:\/\/www.tricentis.com\/software-testing-tool-trial-demo\/tosca-free-trial\/<\/a><\/p>\n\n\n\n<p>Na podany adres email zostaje wys\u0142ana wiadomo\u015b\u0107 z instrukcj\u0105 i dalszymi krokami, kt\u00f3re mamy wykona\u0107.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zak\u0142adamy konto na stronie Tricentis (<a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fsupport.tricentis.com%2Fcommunity%2F&amp;data=02%7C01%7Cjdzieciol%40sii.pl%7Caf9099a40c1242c40b1108d773473465%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C1%7C637104621975089574&amp;sdata=v6eby1EAhLpxAqtdUpH4KDBOSexHaokJIlXKWeh1Y4E%3D&amp;reserved=0\" rel=\"nofollow\" >support.tricentis.com<\/a>)<\/li>\n\n\n\n<li>Pobieramy najnowsz\u0105 wersj\u0119 Tosca Commander (aktualnie najnowsza wersja to 13.0)<\/li>\n\n\n\n<li>Po zainstalowaniu aplikacji i uruchomieniu musimy aktywowa\u0107 odpowiedni\u0105 licencj\u0119. W przypadku Licencji Trial:\n<ul class=\"wp-block-list\">\n<li>Wybieramy na zak\u0142adce <strong>Activate<\/strong> opcj\u0119 <strong>Connect<\/strong><\/li>\n\n\n\n<li>Nast\u0119pnie wybieramy <strong>Connect to Cloud Hosted License Server<\/strong><\/li>\n\n\n\n<li>Podajemy Login i has\u0142o konta, kt\u00f3re za\u0142o\u017cyli\u015bmy na stronie Tricentis<\/li>\n\n\n\n<li>Do naszego konta powinna by\u0107 przypisana licencja Trial i by\u0107 widoczna w dropdown, po jej wyborze mo\u017cemy zacz\u0105\u0107 dzia\u0142a\u0107<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><span style=\"color: #3db6af;\"><strong>HINT:<\/strong> <strong>Warto uko\u0144czy\u0107 dwa szkolenia Automation Specialist 1 &amp; 2, kt\u00f3re s\u0105 dost\u0119pne za darmo i pozwalaj\u0105 pozna\u0107 podstawy u\u017cytkowania Tosca.<\/strong><\/span><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Selenium<\/strong><\/h3>\n\n\n\n<p>To rozwi\u0105zanie wymaga przede wszystkim wi\u0119kszej wiedzy technicznej i umiej\u0119tno\u015bci programistycznych. \u017beby efektywnie automatyzowa\u0107 trzeba zna\u0107 co najmniej jeden j\u0119zyk programowania. Selenium jest powszechnym rozwi\u0105zaniem przy aplikacjach webowych, ze wzgl\u0119du na sw\u00f3j open source\u2019owy charakter i du\u017ce community, dzi\u0119ki kt\u00f3remu powstaj\u0105 darmowe frameworki i narz\u0119dzia wspieraj\u0105ce.<\/p>\n\n\n\n<p>Zanim zaczniemy pisa\u0107 testy, na samym pocz\u0105tku musimy zmierzy\u0107 si\u0119 z nast\u0119puj\u0105cymi tematami:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jakiego j\u0119zyka programowania u\u017cyjemy do pisania skrypt\u00f3w &#8211; najcz\u0119\u015bciej u\u017cywane to Java i Python \u2013 jest to zale\u017cne nie tylko od naszej wiedzy czy umiej\u0119tno\u015bci, ale przede wszystkim od technologii wykorzystywanej w projekcie webowym.<\/li>\n\n\n\n<li>Jakie frameworki, zestaw bibliotek planujemy wykorzysta\u0107, aby usprawni\u0107 pisanie skrypt\u00f3w automatycznych \u2013 po co duplikowa\u0107 tworzenie metod, kt\u00f3re wcze\u015bniej zosta\u0142y napisane.<\/li>\n\n\n\n<li>Wybra\u0107 \u015brodowisko programistyczne (IDE), kt\u00f3re wspomo\u017ce nasz\u0105 prac\u0119 \u2013 bardzo powszechnie u\u017cywan\u0105 platform\u0105 jest Intellij Community.<\/li>\n\n\n\n<li>Przygotowanie \u015brodowiska, zainstalowanie narz\u0119dzi, framework\u00f3w, bibliotek. Dodanie \u015bcie\u017cek do zmiennych \u015brodowiskowych.<\/li>\n\n\n\n<li>Pami\u0119ta\u0107 o u\u017cyciu odpowiedniego sterownika dla ka\u017cdej przegl\u0105darki w odpowiedniej wersji.<\/li>\n\n\n\n<li>Nie mo\u017cna zapomnie\u0107 r\u00f3wnie\u017c o repozytorium danych, kt\u00f3re uchroni nas przed ewentualn\u0105 utrat\u0105 napisanego kodu.<\/li>\n\n\n\n<li>Dodatkowo, jaki wykorzysta\u0107 wzorzec projektowy, kt\u00f3ry pomo\u017ce zbudowa\u0107 architektur\u0119 test\u00f3w automatycznych, czytelnych i \u0142atwych do zarz\u0105dzania.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Rozdzia\u0142 2 Budowanie fundament\u00f3w<\/h2>\n\n\n\n<p>Testy automatyczne, tak jak aplikacja kt\u00f3r\u0105 testujemy, powinny posiada\u0107 odpowiedni\u0105 architektur\u0119, kt\u00f3ra pozwoli tworzy\u0107 sp\u00f3jn\u0105, czyteln\u0105 i \u0142atw\u0105 do utrzymania ca\u0142o\u015b\u0107. Testy powinny dzia\u0142a\u0107 stabilnie bez dodatkowych redundancji i duplikacji, a przede wszystkim zwraca\u0107 czyteln\u0105 informacj\u0119 w przypadku wyst\u0105pienia b\u0142\u0119d\u00f3w w SUT. Co jest zatem podstaw\u0105 przy tworzeniu test\u00f3w? W kontek\u015bcie test\u00f3w UI b\u0119d\u0105 to obiekty interfejsu, na kt\u00f3rych u\u017cytkownik wykonuje akcje. Zatem przyjrzyjmy si\u0119 jak znajdowanie, identyfikowanie i definiowanie obiekt\u00f3w wygl\u0105da w Tosca i Selenium.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tricentis Tosca<\/strong><\/h3>\n\n\n\n<p>Zaczynamy od utworzenia modeli, kt\u00f3re b\u0119d\u0105 u\u017cyte przy budowaniu automatycznych przypadk\u00f3w testowych:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>W zak\u0142adce <strong>MODULES<\/strong> musimy utworzy\u0107 modele b\u0119d\u0105ce reprezentacj\u0105 obiekt\u00f3w w aplikacji. B\u0119d\u0105 to nasze klocki \u201eLego\u201d, z kt\u00f3rych b\u0119dziemy budowa\u0107 przypadki testowe.<\/li>\n\n\n\n<li>Dobr\u0105 praktyk\u0105 jest przechowywanie modeli w odpowiedniej strukturze folder\u00f3w \u2013 zale\u017cne od projektu \u2013 dzi\u0119ki czemu zyskamy porz\u0105dek. R\u00f3wnie\u017c nazewnictwo powinno by\u0107 na tyle zwi\u0119z\u0142e, a jednocze\u015bnie opisowe, aby osoby, kt\u00f3re nie tworzy\u0142y modeli&nbsp;mog\u0142y ich u\u017cywa\u0107 znaj\u0105c jedynie SUT i widz\u0105c UI aplikacji.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Scan-Application-Tosca-1-1.png\"><img decoding=\"async\" width=\"834\" height=\"528\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Scan-Application-Tosca-1-1.png\" alt=\"Scan - Application\" class=\"wp-image-24951\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Scan-Application-Tosca-1-1.png 834w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Scan-Application-Tosca-1-1-300x190.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Scan-Application-Tosca-1-1-768x486.png 768w\" sizes=\"(max-width: 834px) 100vw, 834px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do stworzenia modeli u\u017cywamy opcji Scan dost\u0119pnej pod prawym przyciskiem myszy lub w menu g\u00f3rnym. Do dyspozycji jest wiele opcji, w zale\u017cno\u015bci jak\u0105 aplikacj\u0119 potrzebujemy zautomatyzowa\u0107. Do aplikacji webowych i desktopowych u\u017cywamy Scan -&gt; Application.<\/li>\n\n\n\n<li>Otrzymamy list\u0119 aplikacji, kt\u00f3re s\u0105 aktualnie uruchomione na komputerze. Wybieramy odpowiedni SUT i wciskamy Scan.<\/li>\n\n\n\n<li>Engine Tosca xScan zwraca list\u0119 wszystkich obiekt\u00f3w jakie zosta\u0142y rozpoznane. Pozostaje wyb\u00f3r odpowiednich komponent\u00f3w, kt\u00f3re b\u0119d\u0105 u\u017cywane w testach automatycznych.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/xScan-Tosca.png\"><img decoding=\"async\" width=\"832\" height=\"612\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/xScan-Tosca.png\" alt=\"\" class=\"wp-image-8658\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/xScan-Tosca.png 832w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/xScan-Tosca-300x221.png 300w\" sizes=\"(max-width: 832px) 100vw, 832px\" \/><\/a><\/figure>\n\n\n\n<p><em>1. Menu opcji do znajdowania obiekt\u00f3w<\/em><br><em>2. Lista obiekt\u00f3w zidentyfikowanych przez engine Tosca xScan<\/em><br><em>3. Lista parametr\u00f3w obiekt\u00f3w, s\u0142u\u017c\u0105cych do jednoznacznej identyfikacji element\u00f3w<\/em><br><em>4. Komunikat czy element jest rozpoznany przez Tosca jednoznacznie czy nie jest unikalny<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><span style=\"color: #3db6af;\"><strong>GOOD PRACTICE<\/strong>:<\/span><\/p>\n\n\n\n<p><span style=\"color: #3db6af;\">Pami\u0119taj, nie tw\u00f3rz modeli, kt\u00f3re b\u0119d\u0105 zawiera\u0107 bardzo wiele obiekt\u00f3w. Stw\u00f3rz modu\u0142y odpowiadaj\u0105ce poszczeg\u00f3lnym obszarom aplikacji np. Top Menu, Side Menu, Filtry\/Wyszukiwanie. Jednocze\u015bnie wybieraj tylko te elementy, kt\u00f3re faktycznie b\u0119d\u0105 u\u017cywane w przypadkach testowych.<\/span><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wyb\u00f3r obiekt\u00f3w mo\u017cemy wykona\u0107 za pomoc\u0105 opcji:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><img decoding=\"async\" class=\"wp-image-8672 aligncenter\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Select-on-screen-Icon-Tosca.png\" alt=\"\" width=\"66\" height=\"75\"><\/td><td>\n<ul>\n<li style=\"text-align: left;\"><strong><em>Select on screen<\/em><\/strong> \u2013 wyb\u00f3r elementu na ekranie \u2013 dzi\u0119ki tej opcji jeste\u015bmy w stanie zaznaczy\u0107 kursorem wszystkie potrzebne nam elementy na UI aplikacji.<\/li>\n<\/ul>\n<\/td><\/tr><tr><td><img decoding=\"async\" class=\"wp-image-8674 aligncenter\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Highlight-selection-Icon.png\" alt=\"\" width=\"69\" height=\"84\"><\/td><td>\n<ul>\n<li style=\"text-align: left;\"><strong style=\"font-family: inherit; font-size: inherit;\"><em>Highlight selection \u2013 <\/em><\/strong>&nbsp;po zaznaczenie elementu na li\u015bcie umo\u017cliwia<span style=\"font-family: inherit; font-size: inherit;\">&nbsp;pod\u015bwietlenie go na UI aplikacji. Mo\u017cemy upewni\u0107 si\u0119 \u017ce wybrany przez nas obiekt jest tym kt\u00f3ry nas interesuje.<\/span><\/li>\n<\/ul>\n<\/td><\/tr><tr><td><img decoding=\"async\" class=\"wp-image-8675 aligncenter\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Filtered-items-Tosca.png\" alt=\"\" width=\"281\" height=\"82\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Filtered-items-Tosca.png 157w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Filtered-items-Tosca-150x45.png 150w\" sizes=\"(max-width: 281px) 100vw, 281px\" \/><\/td><td>\n<ul>\n<li style=\"text-align: left;\"><strong><em>Filtered Items&nbsp;<\/em><\/strong>\u2013 w&nbsp;przypadku, gdy \u017cadnego obiektu nie uda\u0142o si\u0119 znale\u017a\u0107 na li\u015bcie, mo\u017cemy przesun\u0105\u0107 suwak&nbsp;(w praw\u0105 stron\u0119) aby uzyska\u0107 bardziej szczeg\u00f3\u0142ow\u0105 struktur\u0119 aplikacji.<\/li>\n<\/ul>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zidentyfikowanie jednoznaczne obiektu \u2013 wa\u017cnym aspektem tworzenia Modeli jest odpowiednie wyznaczenie element\u00f3w interface\u2019u, kt\u00f3re b\u0119d\u0105 niepowtarzalne. Dzi\u0119ki temu przy uruchamianiu przypadk\u00f3w testowych Tosca b\u0119dzie w stanie odszuka\u0107 w\u0142a\u015bciwy komponent. Gdy obiekt nie b\u0119dzie zidentyfikowany unikalnie, wtedy otrzymamy komunikat <strong><em>\u201eMore than one control found\u201d \u2013<\/em><\/strong>&nbsp;oznacza to \u017ce Tosca nie wie na czym ma wykona\u0107 akcj\u0119.<\/li>\n\n\n\n<li>Do identyfikacji element\u00f3w u\u017cywamy nast\u0119puj\u0105cych metod:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td rowspan=\"4\"><img decoding=\"async\" class=\" wp-image-8687 aligncenter\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/Identify-by-Tosca.png\" alt=\"\" width=\"179\" height=\"308\"><\/td><td>\n<ul>\n<li style=\"text-align: left;\"><strong>Properties<\/strong> <strong><em>\u2013<\/em><\/strong> najcz\u0119\u015bciej obiekty rozpoznawane b\u0119d\u0105 po w\u0142a\u015bciwo\u015bciach technicznych, s\u0105 to np. ID, ClassName, InnerText,Title b\u0105d\u017a inny identyfikator, kt\u00f3ry jest unikalny dla danej kontrolki. Dzi\u0119ki temu, \u017ce Tosca zwraca pe\u0142n\u0105 list\u0119 parametr\u00f3w technicznych dla ka\u017cdego elementu, mo\u017cemy w \u0142atwy spos\u00f3b wybra\u0107 po czym b\u0119dzie rozpoznawany obiekt.<\/li>\n<\/ul>\n<\/td><\/tr><tr><td>\n<ul>\n<li style=\"text-align: left;\"><strong>Anchor<\/strong> <strong><em>\u2013<\/em><\/strong> je\u017celi element nie posiada \u017cadnego unikalnego parametru technicznego, mo\u017cemy u\u017cy\u0107 Kotwicy do zidentyfikowania go. Polega to na po\u0142\u0105czeniu z innym elementem, kt\u00f3ry zosta\u0142 rozpoznany jednoznacznie np. pole edycyjne mo\u017ce by\u0107 po\u0142\u0105czone z etykiet\u0105 (Label), kt\u00f3ra j\u0105 opisuje na stronie.<\/li>\n<\/ul>\n<\/td><\/tr><tr><td>\n<ul>\n<li style=\"text-align: left;\"><strong>Image<\/strong> <strong><strong><em>\u2013<\/em><\/strong><\/strong>&nbsp;w przypadku gdy \u017cadne z powy\u017cszych rozwi\u0105za\u0144 nie przynosi rezultatu, do identyfikacji mo\u017cemy u\u017cy\u0107 obrazu kontrolki. Nale\u017cy jednak unika\u0107 tej metody, gdy\u017c jest wra\u017cliwa na zmiany np. rozdzielczo\u015b\u0107, kolor, rozmiar etc.<\/li>\n<\/ul>\n<\/td><\/tr><tr><td>\n<ul>\n<li style=\"text-align: left;\"><strong>Index<\/strong> <strong><em>\u2013<\/em><\/strong>&nbsp;ostatnim sposobem identyfikacji obiektu jest index, trzeba jednak bra\u0107 pod uwag\u0119, \u017ce jest wra\u017cliwe na ewentualne zmiany w SUT. Tej metody mo\u017cna u\u017cywa\u0107 przy listach rozwijanych, o ile nie b\u0119dzie zmiany kolejno\u015b\u0107 jej zawarto\u015bci.<\/li>\n<\/ul>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong><span style=\"color: #3db6af;\"><br>HINT: W pierwszej kolejno\u015bci nale\u017cy u\u017cywa\u0107 parametr\u00f3w technicznych (Technical Properties) aby zidentyfikowa\u0107 unikalnie obiekty &#8211; najszybsza i najbardziej stabilna opcja.<\/span><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kolejnym krokiem jest odpowiednie nazwanie wybranych obiekt\u00f3w oraz ca\u0142ego modu\u0142u, aby odzwierciedla\u0142 interfejs u\u017cytkownika, umo\u017cliwiaj\u0105c czytelno\u015b\u0107 i \u0142atwo\u015b\u0107 u\u017cytkowania dla os\u00f3b buduj\u0105cy przypadki testowe z dost\u0119pnych modeli.<\/li>\n\n\n\n<li>A na koniec zapisanie Modelu. W taki spos\u00f3b przygotowujemy \u201eklocki\u201d s\u0142u\u017c\u0105ce do tworzenia przypadk\u00f3w testowych.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Selenium<\/strong><\/h3>\n\n\n\n<p>W przypadku tego podej\u015bcia, r\u00f3wnie\u017c wyodr\u0119bniamy odpowiednie elementy, przy czym identyfikacj\u0119 musimy wykona\u0107 samodzielnie, dlatego wa\u017cne jest aby posiada\u0107 podstawow\u0105 wiedz\u0119 z zakresu HTML.<\/p>\n\n\n\n<p>Na przyk\u0142adzie przygotowanego skryptu, zosta\u0142y wykonane nast\u0119puj\u0105ce czynno\u015bci:<\/p>\n\n\n\n<p>Konfiguracja \u015brodowiska do automatyzacji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instalacja odpowiedniej wersji JDK \u2013 \u015brodowisko Java dla developer\u00f3w.<\/li>\n\n\n\n<li>Instalacja narz\u0119dzia automatyzuj\u0105cego budowanie aplikacji. W naszym projekcie zosta\u0142 u\u017cyty Maven.<\/li>\n\n\n\n<li>Instalacja \u015brodowiska programistycznego IDE. U nas u\u017cywany Intellij Community.<\/li>\n\n\n\n<li>Pobranie odpowiedniego sterownika (driver) przegl\u0105darki. W naszym przypadku sterownik dla Chrome w wersji 79.<\/li>\n\n\n\n<li>Utworzenie nowego projektu w Intellij z u\u017cyciem Java + Maven. W pliku pom.xml nale\u017cy doda\u0107 podstawowe dependencies w odpowiedniej wersji z mvnrepository.com dla:\n<ul class=\"wp-block-list\">\n<li>Narz\u0119dzia do automatyzacji test\u00f3w Selenium<\/li>\n\n\n\n<li>Frameworka do pisania test\u00f3w, w projekcie zosta\u0142 u\u017cyty TestNg<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Wyb\u00f3r wzorca projektowego&nbsp;\u2013 w naszym przypadku Page Object Model.<\/li>\n<\/ul>\n\n\n\n<p>Przygotowana architektura:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>helpers&nbsp;\u2013 zawiera klasy do konfiguracji&nbsp;drivera oraz przegl\u0105darki<\/li>\n\n\n\n<li>pages&nbsp;\u2013 zawiera klasy z elementami i metodami dotycz\u0105ce danej strony (pages), HelperPage zawiera wsp\u00f3lne&nbsp;metody, kt\u00f3re s\u0105 wykorzystywane w innych klasach pages<\/li>\n\n\n\n<li>testData \u2013 zawiera interface z danymi testowymi<\/li>\n\n\n\n<li>tests \u2013 zawiera klas\u0119 z testami oraz bazow\u0105 klas\u0119 TestBase, kt\u00f3ra inicjalizuje WebDriver<\/li>\n\n\n\n<li>resources \u2013 zawiera plik konfiguracyjny z adresem URL oraz&nbsp;lokalizacj\u0105 driver\u00f3w<\/li>\n<\/ol>\n\n\n\n<p>Identyfikacja obiekt\u00f3w:<\/p>\n\n\n\n<p>W Selenium mo\u017cemy znale\u017a\u0107 WebElementy z wykorzystaniem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>id<\/li>\n\n\n\n<li>name<\/li>\n\n\n\n<li>className<\/li>\n\n\n\n<li>css<\/li>\n\n\n\n<li>tagName<\/li>\n\n\n\n<li>linkText<\/li>\n\n\n\n<li>partialLinkText<\/li>\n\n\n\n<li>xpath<\/li>\n<\/ul>\n\n\n\n<p>Jak mo\u017cna zauwa\u017cy\u0107, w obu narz\u0119dziach u\u017cywamy parametr\u00f3w technicznych, jedyna r\u00f3\u017cnica jest taka, \u017ce Tosca zwraca wszystko w formie czytelnej listy, z kt\u00f3rej wybieramy odpowiednie atrybuty, a w Selenium musimy sami zag\u0142\u0119bi\u0107 si\u0119 w struktur\u0119 html i wybra\u0107 odpowiedni parametr. Tosca od razu zwr\u00f3ci nam informacj\u0119 o tym, czy b\u0119dzie w stanie wykona\u0107 akcj\u0119 na obiekcie, w przypadku Selenium wymagane jest uruchomienie skryptu by sprawdzi\u0107 czy poprawnie zosta\u0142 znaleziony WebElement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Przyk\u0142ad zidentyfikowanego elementu przycisk Aplikuj<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Selenium<\/strong><\/h3>\n\n\n\n<p>Dla os\u00f3b mniej technicznych mo\u017ce wydawa\u0107 si\u0119 ma\u0142o czytelne i trudniejsze do napisania.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\n@FindBy(xpath = &quot;\/\/*&#x5B;@id=\\&quot;form_job_application\\&quot;]\/\/*&#x5B;@id=\\&quot;submit_btn\\&quot;]&quot;)\nWebElement submitButton;\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong>Tosca<\/strong><\/h3>\n\n\n\n<p>Wystarczy wybra\u0107, w momencie skanowania, odpowiedni obiekt z parametrem technicznym, w tym przypadku Id = submit_btn<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/Aplikuj-Button-Tosca.png\"><img decoding=\"async\" width=\"840\" height=\"320\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/Aplikuj-Button-Tosca.png\" alt=\"\" class=\"wp-image-24953\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/Aplikuj-Button-Tosca.png 840w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/Aplikuj-Button-Tosca-300x114.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/Aplikuj-Button-Tosca-768x293.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><\/figure>\n\n\n\n<p>Posiadaj\u0105c fundamenty mo\u017cemy przyst\u0105pi\u0107 do tworzenia pe\u0142nego przypadku testowego:<\/p>\n\n\n\n<p>\u201eWyszukanie oferty pracy na stronie Sii\u201d<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Otworzenie strony <a href=\"http:\/\/www.sii.pl\">sii.pl<\/a><\/li>\n\n\n\n<li>Przej\u015bcie do PRACA W SII<\/li>\n\n\n\n<li>Wyszukanie stanowiska: Automation Tester<\/li>\n\n\n\n<li>Wyfiltrowanie po miejscowo\u015bci: Warszawa<\/li>\n\n\n\n<li>Przej\u015bcie do oferty<\/li>\n\n\n\n<li>Sprawdzenie czy Tytu\u0142 = Automation Tester<\/li>\n\n\n\n<li>Sprawdzenie czy Lokacja = Warszawa<\/li>\n\n\n\n<li>Wype\u0142nienie formularza Danymi Osobowymi<\/li>\n\n\n\n<li>Zaznaczenie obligatoryjnego checkbox\u2019a<\/li>\n\n\n\n<li>Wys\u0142anie Aplikacji bez za\u0142\u0105czonego CV<\/li>\n\n\n\n<li>Sprawdzenie czy informacja \u201eZa\u0142\u0105cznik jest wymagany\u201d zostaje wy\u015bwietlona<\/li>\n<\/ol>\n\n\n\n<p>W kolejnym artykule przedstawiony zostanie materia\u0142 po\u015bwi\u0119cony tworzeniu przypadk\u00f3w testowych, zasilanie danymi oraz uruchamianie skrypt\u00f3w. Zapraszam serdecznie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-right\"><span style=\"color: #3db6af;\">Ci\u0105g dalszy nast\u0105pi &gt;&gt;<\/span><\/h3>\n\n\n\n<p><em>Wsparcie w zakresie Selenium zapewni\u0142 <strong>Arkadiusz Purski<\/strong>.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Chcesz dowiedzie\u0107 si\u0119 wi\u0119cej o testowaniu oprogramowania w Sii? Odwied\u017a stron\u0119&nbsp;<a href=\"https:\/\/sii.pl\/oferta\/testing\/\">Centrum Kompetencyjnego Us\u0142ugi Testowe<\/a>. Je\u015bli chcesz do nas do\u0142\u0105czy\u0107,&nbsp;<a href=\"https:\/\/sii.pl\/oferty-pracy\/all\/all\/10\/?js=tester\">sprawd\u017a aktualne oferty pracy.<\/a><\/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;8616&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;25&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;3.6&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;3.6\\\/5 ( votes: 25)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Jak d\u0105\u017cy\u0107 do Jako\u015bci z u\u017cyciem Tricentis Tosca. Cz\u0119\u015b\u0107 1.&quot;,&quot;width&quot;:&quot;98.9&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: 98.9px;\">\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            3.6\/5 ( votes: 25)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Jako\u015b\u0107 to doskona\u0142o\u015b\u0107,&nbsp;kt\u00f3rej nie da si\u0119 osi\u0105gn\u0105\u0107,lecz do kt\u00f3rej trzeba uporczywie zd\u0105\u017ca\u0107.Lao Tzu Wst\u0119p Mamy rok 2019, technologia, komputery, internet &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/jak-dazyc-do-jakosci-z-uzyciem-tricentis-tosca-czesc-1\/\">Continued<\/a><\/p>\n","protected":false},"author":233,"featured_media":8722,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[1512,807,230,750],"class_list":["post-8616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-poradnik","tag-testowanie","tag-selenium","tag-tosca-commander"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/12\/tosca1.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/8616"}],"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\/233"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=8616"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/8616\/revisions"}],"predecessor-version":[{"id":24955,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/8616\/revisions\/24955"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/8722"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=8616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=8616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=8616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}