{"id":7879,"date":"2019-09-17T13:18:02","date_gmt":"2019-09-17T11:18:02","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=7879"},"modified":"2025-05-07T12:14:03","modified_gmt":"2025-05-07T10:14:03","slug":"codeceptjs-przyjazna-automatyzacja-testow-akceptacyjnych-dla-www","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/codeceptjs-przyjazna-automatyzacja-testow-akceptacyjnych-dla-www\/","title":{"rendered":"CodeceptJS &#8211; Przyjazna automatyzacja test\u00f3w akceptacyjnych dla www!"},"content":{"rendered":"\n<p>W dzisiejszym wpisie chcia\u0142bym podzieli\u0107 si\u0119 z frameworkiem do test\u00f3w automatycznych, kt\u00f3ry ma aktywn\u0105 spo\u0142eczno\u015b\u0107 i jest ca\u0142y czas rozwijany. Mowa o CodeceptJS. <\/p>\n\n\n\n<p>Jest to framework, kt\u00f3ry rozszerza funkcjonalno\u015b\u0107 takich framework\u00f3w jak:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Puppeteer<\/li>\n\n\n\n<li>Selenium WebDriver<\/li>\n\n\n\n<li>TestCafe<\/li>\n\n\n\n<li>Appium<\/li>\n\n\n\n<li>Detox<\/li>\n\n\n\n<li>Protractor<\/li>\n\n\n\n<li>Nightmare<\/li>\n<\/ul>\n\n\n\n<p>G\u0142\u00f3wn\u0105 jego zalet\u0105 jest, \u017ce ma zaimplementowane wiele przydatnych funkcji, nie musimy sami tego robi\u0107, wi\u0119c oszcz\u0119dzamy potencjalny czas, kt\u00f3ry musieliby\u015bmy po\u015bwi\u0119ci\u0107 na dodanie tych funkcji. R\u00f3wnie\u017c dzi\u0119ki temu, \u017ce ilo\u015b\u0107 framework\u00f3w testowych, kt\u00f3re wspiera CodeceptJS jest tak du\u017ca, \u017ce wi\u0119kszo\u015b\u0107 os\u00f3b znajdzie co\u015b dla siebie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Czego dowiesz si\u0119 z tekstu?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dlaczego warto zainteresowa\u0107 si\u0119 CodeceptJS?<\/li>\n\n\n\n<li>Jak doda\u0107 Allure report dla projektu test\u00f3w?<\/li>\n\n\n\n<li>Jak ustawi\u0107 robienie zrzut\u00f3w ekranu po ka\u017cdym kroku?<\/li>\n<\/ul>\n\n\n\n<p>Podstaw\u0105 jest to, \u017ce CodeceptJS narzuca sw\u00f3j format formu\u0142owania test\u00f3w. Domy\u015blnie jest to zapisanie w ten spos\u00f3b, \u017ce nasz krok wyj\u015bciowy testu zaczyna si\u0119 od u\u017cycia \u201eI\u201d. Ka\u017cdy z framework\u00f3w ma dodane predefiniowane kroki dla siebie, takie jak przej\u015bcie na stron\u0119, czy klikni\u0119cie w okre\u015blony element.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter wp-image-7867\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codecept.png\"><img decoding=\"async\" width=\"803\" height=\"659\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codecept.png\" alt=\"\" class=\"wp-image-7867\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codecept.png 803w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codecept-300x246.png 300w\" sizes=\"(max-width: 803px) 100vw, 803px\" \/><\/a><figcaption class=\"wp-element-caption\"><span style=\"float: none; background-color: transparent; color: #333333; cursor: text; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px;\"> \u017ar\u00f3d\u0142o: &#8222;https:\/\/codecept.io\/&#8221;<\/span><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">CodeceptJS &#8211; historia<\/h2>\n\n\n\n<p>Pierwszy raz natkn\u0105\u0142em si\u0119 na ten framework kilka lat temu. Napisa\u0142em na ten temat kilka wpis\u00f3w, jednak po tym czasie widz\u0119, jak bardzo rozwin\u0105\u0142 si\u0119 on i jest warty uwagi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jakie zalety ma CodeceptJS<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Posiada kilka przydatnych rozszerze\u0144, takich jak wsparcie dla Visual Regression, czy Allure Report.<\/li>\n\n\n\n<li>Wspiera parallel \u2013 uruchamianie wsp\u00f3\u0142bie\u017cnie test\u00f3w.<\/li>\n\n\n\n<li>Posiada obszern\u0105 dokumentacj\u0119, jak i aktywn\u0105 spo\u0142eczno\u015b\u0107. Gdy wybieramy framework testowy, jest to bardzo wa\u017cne, \u017ceby spo\u0142eczno\u015b\u0107 by\u0142a aktywna. Dzi\u0119ki temu nie zostajemy sami z jakim\u015b problem, jak to bywa w sytuacji, gdy projekt jest porzucony.<\/li>\n\n\n\n<li>Dzi\u0119ki temu, \u017ce jest to open source, sami w prosty spos\u00f3b mo\u017cemy doda\u0107 kolejne pluginy, funkcje.<\/li>\n\n\n\n<li>Je\u017celi jeste\u015bmy fanami Gherkina, r\u00f3wnie\u017c zamiast domy\u015blnego zapisu test\u00f3w, mo\u017cemy skorzysta\u0107 z tego sposobu zapisu.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Wady<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mo\u017cliwe, \u017ce komu\u015b spos\u00f3b zapisu mo\u017ce si\u0119 nie spodoba\u0107 i preferuje standardowe formu\u0142owanie test\u00f3w.<\/li>\n\n\n\n<li>Dla niekt\u00f3rych os\u00f3b mo\u017ce by\u0107 to przerost formy nad tre\u015bci\u0105 i wol\u0105 sami szybko utworzy\u0107 framework dla swoich cel\u00f3w.<\/li>\n\n\n\n<li>Dla istniej\u0105cych projekt\u00f3w mo\u017ce by\u0107 to kosztowne, \u017ceby zacz\u0105\u0107 z niego korzysta\u0107, bo musimy dostosowa\u0107 testy do nowej konwencji.<\/li>\n<\/ul>\n\n\n\n<p>Pami\u0119tajmy, \u017ce sam CodeceptJS nie jest rozwi\u0105zaniem na ka\u017cdy przypadek. W 99% nie unikniemy sytuacji, \u017ce b\u0119dzie potrzebna nam wi\u0119ksza wiedza programistyczna. Zyskujemy g\u0142\u00f3wnie to, \u017ce CodeceptJS dostarcza nam gotowe modu\u0142y takie jak np. tworzenie zrzut\u00f3w ekran\u00f3w po ka\u017cdym kroku w testach lub tworzenie raportu z test\u00f3w. Dodatkowo nale\u017cy te\u017c pami\u0119ta\u0107, \u017ce CodeceptJS bazuje na innych popularnych i sprawdzonych frameworkach, kt\u00f3re s\u0105 wykorzystywane w testach automatycznych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Czego potrzebujemy?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ja korzystam z Visual Studio Code \u2013 jest to darmowy edytor kodu.<\/li>\n\n\n\n<li>NPM \/ NXM \u2013 menad\u017cer pakiet\u00f3w, kt\u00f3rym pobierzemy potrzebny nam CodeceptJS oraz inne potrzebne pakiety takie jak np. Puppeteer. Podczas inicjalizowania CodeceptJS b\u0119dziemy mieli informacje o tym, \u017ce potrzebujemy jeszcze co\u015b doinstalowa\u0107.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Instalacja CodeceptJS<\/h2>\n\n\n\n<p>CodeceptJS mo\u017cemy zainstalowa\u0107 na kilka sposob\u00f3w, np. poprzez npma.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/npm.png\"><img decoding=\"async\" width=\"1097\" height=\"637\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/npm.png\" alt=\"\" class=\"wp-image-7868\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/npm.png 1097w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/npm-300x174.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/npm-1024x595.png 1024w\" sizes=\"(max-width: 1097px) 100vw, 1097px\" \/><\/a><\/figure>\n\n\n\n<p>Po zainstalowaniu npm przechodz\u0119 do pobrania CodeceptJS. Po pobraniu moim oczom ukazuje si\u0119 taki widok:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/instaled_codeceptjs.png\"><img decoding=\"async\" width=\"1098\" height=\"641\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/instaled_codeceptjs.png\" alt=\"\" class=\"wp-image-7869\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/instaled_codeceptjs.png 1098w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/instaled_codeceptjs-300x175.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/instaled_codeceptjs-1024x598.png 1024w\" sizes=\"(max-width: 1098px) 100vw, 1098px\" \/><\/a><\/figure>\n\n\n\n<p>Po wywo\u0142aniu komendy <strong>codeceptjs<\/strong> prezentowany jest tzw. \u201ehelp\u201d<span style=\"float: none; background-color: transparent; color: #333333; cursor: text; font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px;\">dla wszystkich komend. C<\/span>zyli, w skr\u00f3cie, wylistowanie dost\u0119pnych komend wraz z komentarzem co one robi\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pierwszy test w CodeceptJS<\/h2>\n\n\n\n<p>Jak b\u0119dzie wygl\u0105da\u0142 test?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Przejd\u0119 na stron\u0119, na kt\u00f3rej znajduje si\u0119 formularz kontaktowy &#8211; <a href=\"https:\/\/testblogselenium.wordpress.com\/contact\/\" rel=\"nofollow\" >https:\/\/testblogselenium.wordpress.com\/contact\/<\/a>.<\/li>\n\n\n\n<li>Wype\u0142ni\u0119 trzy pola tre\u015bci\u0105 (Name, Email, Comment).<\/li>\n\n\n\n<li>Wy\u015bl\u0119 ten formularz.<\/li>\n\n\n\n<li>Sprawdz\u0119 wy\u015bwietlanie komunikatu \u201eMessage Sent (go back)\u201d.<\/li>\n<\/ul>\n\n\n\n<p>Prac\u0119 rozpoczynam od inicjalizacji CodeceptJS. Robi\u0119 to z poziomu konsoli (najlepiej utworzy\u0107 przed tym sobie folder w tej \u015bcie\u017cce np. poprzez <strong>mkdir \u2018nazwa folderu\u2019<\/strong> z konsoli lub poprzez graficzny interfejs u\u017cytkownika).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_init.png\"><img decoding=\"async\" width=\"919\" height=\"529\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_init.png\" alt=\"\" class=\"wp-image-7870\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_init.png 919w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_init-300x173.png 300w\" sizes=\"(max-width: 919px) 100vw, 919px\" \/><\/a><\/figure>\n\n\n\n<p>CodeceptJS zawiera przyjemny kreator projektu. Wywo\u0142ujemy go poprzez u\u017cycie komendy <strong>codeceptjs init<\/strong>. W tym miejscu CodeceptJS zapyta nas o kilka rzeczy, kt\u00f3re potrzebne s\u0105 do stworzenia projektu. Zaczynam od wskazania, jak\u0105 notacje nazwy b\u0119d\u0105 zawiera\u0142y nasze testy. Mo\u017ce to by\u0107 np. &nbsp;.\/*_test.js &#8211; czyli ka\u017cdy plik, kt\u00f3ry b\u0119dzie spe\u0142nia\u0142 to za\u0142o\u017cenie b\u0119dzie brany pod uwag\u0119 podczas uruchamiania test\u00f3w. Pliki o innej nazwie, nawet je\u017celi b\u0119d\u0105 zawiera\u0142y kod testu, nie b\u0119d\u0105 brane pod uwag\u0119.<\/p>\n\n\n\n<p>Nast\u0119pnie decydujemy, kt\u00f3rego helpera chcemy u\u017cy\u0107, ja w tym miejscu u\u017cyje Puppeteera.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Czym jest Puppeteer?<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter wp-image-7871\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/puppeteer.png\"><img decoding=\"async\" width=\"290\" height=\"422\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/puppeteer.png\" alt=\"\" class=\"wp-image-7871\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/puppeteer.png 290w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/puppeteer-206x300.png 206w\" sizes=\"(max-width: 290px) 100vw, 290px\" \/><\/a><figcaption class=\"wp-element-caption\">\u017ar\u00f3d\u0142o: &#8222;https:\/\/github.com\/GoogleChrome\/puppeteer&#8221;<\/figcaption><\/figure>\n\n\n\n<p>Sam Puppeteer m\u00f3g\u0142by mie\u0107 po\u015bwi\u0119cony osobny wpis. W skr\u00f3cie Puppeteer pozwala na sprawne korzystanie z Chromium \/ Chrome nie tylko do cel\u00f3w test\u00f3w, ale do wi\u0119kszo\u015bci potrzebnych akcji, kt\u00f3re chcemy wykona\u0107, np. pobranie pliku pdf, czy do automatyzacji innych akcji zwi\u0105zanych z przegl\u0105dark\u0105.<\/p>\n\n\n\n<p>Dzia\u0142a te\u017c szybciej ni\u017c Selenium WebDriver z ChromeDriverem. Du\u017c\u0105 zalet\u0105 jest wsparcie asynchroniczno\u015bci, dzi\u0119ki temu unikamy w kodzie dodawania tzw. sleep\u00f3w i test jest znacznie bardziej stabilny.<\/p>\n\n\n\n<p>Wracaj\u0105c do kodu testu, w nast\u0119pnym kroku decydujemy gdzie chcemy, \u017ceby by\u0142y przechowywane rezultaty naszych test\u00f3w. Domy\u015blnie jest to folder .\/output. Rezultatami mog\u0105 by\u0107 zrzuty ekranu, czy np. pliki, kt\u00f3re wygenerowa\u0142 Allure podczas uruchomienia test\u00f3w, kt\u00f3re potrzebne s\u0105 do wygenerowania raportu.<\/p>\n\n\n\n<p>Po czym pojawia si\u0119 pytanie o lokalizacje, je\u017celi w testach chcemy u\u017cywa\u0107 niestandardowych znak\u00f3w. Po tym kroku przechodz\u0119 do podania \u015bcie\u017cki do naszej strony. Poda\u0142em \u015bcie\u017ck\u0119 bezwzgl\u0119dn\u0105 do strony, kt\u00f3ra b\u0119dzie testowana, bo jest to jeden test, wi\u0119c lepiej oszcz\u0119dzi\u0107 ten czas egzekucji testu i bezpo\u015brednio si\u0119 uda\u0107 pod wskazan\u0105 podstron\u0119. Oczywi\u015bcie, je\u017celi nie by\u0142by to przyk\u0142ad taki jak ten, nasz adres, kt\u00f3ry by\u015bmy podali, powinien by\u0107 stron\u0105 g\u0142\u00f3wn\u0105, kt\u00f3r\u0105 testujemy. Mo\u017cliwe jest r\u00f3wnie\u017c przekazywanie r\u00f3\u017cnych adres\u00f3w url poprzez parametr, je\u017celi nasze testy uruchamiamy np. na kilku \u015brodowiskach. Ostatnie pytanie jest o to, czy chc\u0119, \u017ceby Puppeteer by\u0142 w trybie headless, czy nie. Je\u017celi nie, to nie b\u0119d\u0119 widzie\u0107 okna przegl\u0105darki z uruchamiaj\u0105cym si\u0119 testem &#8211; b\u0119dzie on uruchomiony w tle. Ja zaznaczy\u0142em \u201eYes\u201d wi\u0119c okno przegl\u0105darki b\u0119dzie widoczne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CodeceptJS &#8211; Tworzenie pliku testu z kreatora<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"828\" height=\"131\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_create_file.png\" alt=\"\" class=\"wp-image-7872\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_create_file.png 828w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_create_file-300x47.png 300w\" sizes=\"(max-width: 828px) 100vw, 828px\" \/><\/figure>\n\n\n\n<p>Po stworzeniu pierwszego testu przechodzimy do otworzenia naszego folderu w Visual Studio Code. Mo\u017cemy zauwa\u017cy\u0107, \u017ce CodeceptJS stworzy\u0142 kilku plik\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_list_of_files.png\"><img decoding=\"async\" width=\"294\" height=\"155\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs_list_of_files.png\" alt=\"\" class=\"wp-image-7873\"\/><\/a><\/figure>\n\n\n\n<p>Najwa\u017cniejsze pliki:<\/p>\n\n\n\n<p><strong>codecept.conf.js <\/strong>\u2013 jest to miejsce, w kt\u00f3rym s\u0105 zapisane ustawienia, kt\u00f3re podali\u015bmy podczas inicjalizacji. R\u00f3wnie\u017c sami mo\u017cemy t\u0105 sekcje rozszerza\u0107.<\/p>\n\n\n\n<p><strong>contactForm_test.js <\/strong>\u2013 jest to plik zawieraj\u0105cy test, kt\u00f3ry utworzyli\u015bmy.<\/p>\n\n\n\n<p><strong>steps.d.ts<\/strong> \u2013 Plik wygenerowany dla naszego Visual Studio Code, kt\u00f3ry zawiera informacje o metodach dla IntelliSense. Bazuj\u0105c na tym, widzimy po kropce informacje o metodach, kt\u00f3re mamy do dyspozycji.<\/p>\n\n\n\n<p><strong>steps_file.js<\/strong> \u2013 W tym miejscu mo\u017cemy doda\u0107 metody, kt\u00f3re pojawi\u0142by si\u0119 po \u201eI.\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CodeceptJS \u2013 przydatne metody<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/methods_after_i.png\"><img decoding=\"async\" width=\"794\" height=\"468\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/methods_after_i.png\" alt=\"\" class=\"wp-image-7874\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/methods_after_i.png 794w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/methods_after_i-300x177.png 300w\" sizes=\"(max-width: 794px) 100vw, 794px\" \/><\/a><\/figure>\n\n\n\n<p>CodeceptJS ma kilkadziesi\u0105t przydatnych metod, kt\u00f3rych mo\u017cemy u\u017cy\u0107 podczas pisania test\u00f3w. Mo\u017ce to by\u0107 np.:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I.click(\u2018string\u2019) lub I.click(\u2018selector\u2019) &#8211; pozwala na klikni\u0119cie w okre\u015blony element.<\/li>\n\n\n\n<li>I.fillField(\u2018Pole\u2019,\u2019nazwa\u2019) \u2013 pozwala nam wype\u0142ni\u0107 okre\u015blone pole tekstem. Poza nazw\u0105 pola mo\u017ce by\u0107 to r\u00f3wnie\u017c selektor cssowy, kt\u00f3ry reprezentuje element na stronie.<\/li>\n\n\n\n<li>I.see(\u2018something\u2019) \u2013 metoda, kt\u00f3rej u\u017cywam do zrobienia asercji, kt\u00f3ra sprawdzi wy\u015bwietlanie elementu w CodeceptJS. Parametrem mo\u017ce by\u0107 tekst lub okre\u015blony selektor.<\/li>\n<\/ul>\n\n\n\n<p>Test wygl\u0105da tak.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/test_how_it_looks.png\"><img decoding=\"async\" width=\"972\" height=\"271\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/test_how_it_looks.png\" alt=\"\" class=\"wp-image-7875\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/test_how_it_looks.png 972w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/test_how_it_looks-300x84.png 300w\" sizes=\"(max-width: 972px) 100vw, 972px\" \/><\/a><\/figure>\n\n\n\n<p>Przede wszystkim rozpoczynam prac\u0119 z CodeceptJS od u\u017cycia metody I.amOnPage(\u201e\/\u201d); (podczas inicjalizowania projektu wskaza\u0142em adres do strony (<a href=\"https:\/\/testblogselenium.wordpress.com\/contact\/\" rel=\"nofollow\" >https:\/\/testblogselenium.wordpress.com\/contact\/<\/a>), kt\u00f3r\u0105 b\u0119dziemy testowa\u0107, wi\u0119c dlatego wystarczy u\u017cy\u0107 \u201e\/\u201d).<\/p>\n\n\n\n<p>Nast\u0119pnie przechodz\u0119 do wype\u0142nienia tekstem pola Name. CodeceptJS radzi sobie z wpisywaniem tekstu, gdy pole ma powi\u0105zanego ze sob\u0105 labela, tak jak jest to w tym przypadku. Oczywi\u015bcie, je\u017celi trafimy na przypadek bardziej skomplikowany, gdzie podanie nazwy nie wystarczy, to mo\u017cemy u\u017cy\u0107 w tym miejscu okre\u015blonego locatora css lub xpath.<\/p>\n\n\n\n<p>Podobne jest w 7 i 8 linijce &#8211; wype\u0142niam tre\u015bci\u0105 pola \u201eEmail\u201d oraz \u201eComment\u201d. Natomiast w 9 linijce korzystamy z metody I.click(\u2018Submit\u2019), kt\u00f3ra pozwala klika\u0107 w okre\u015blony element. Tym elementem mo\u017ce by\u0107 tekst, jak i r\u00f3wnie\u017c okre\u015blony selector css lub xpath.<\/p>\n\n\n\n<p>Test ko\u0144czy si\u0119 asercj\u0105. Aby sprawdzi\u0107, czy dany element, tekst wy\u015bwietla si\u0119 na stronie, korzystamy z metody I.see(\u2018something\u2019).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dodawanie Allure report dla CodeceptJS<\/h2>\n\n\n\n<p>Aby doda\u0107 Allure Report musimy przede wszystkim mie\u0107 zainstalowany allure-commandline na naszej maszynie, kt\u00f3ry b\u0119dzie generowa\u0142 nam raport z plik\u00f3w, kt\u00f3re stworz\u0105 si\u0119 podczas uruchomienia test\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalowanie allure-commandline?<\/h2>\n\n\n\n<p>Allure commandline mo\u017cemy zainstalowa\u0107 poprzez npm\u2019a.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_commandline-1.png\"><img decoding=\"async\" width=\"753\" height=\"104\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_commandline-1.png\" alt=\"\" class=\"wp-image-7884\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_commandline-1.png 753w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_commandline-1-300x41.png 300w\" sizes=\"(max-width: 753px) 100vw, 753px\" \/><\/a><\/figure>\n\n\n\n<p>Gdy mamy ju\u017c zainstalowany allure-commandline, przechodzimy do konfiguracji CodeceptJS, kt\u00f3ra znajduje si\u0119 w pliku \u2013 <strong>codecept.conf.js.<\/strong> W nim dodaj\u0119 sekcje z pluginem &#8211; w tym wypadku jest to Allure.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_plugin.png\"><img decoding=\"async\" width=\"658\" height=\"599\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_plugin.png\" alt=\"\" class=\"wp-image-7883\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_plugin.png 658w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_plugin-300x273.png 300w\" sizes=\"(max-width: 658px) 100vw, 658px\" \/><\/a><\/figure>\n\n\n\n<p>Nast\u0119pnie dodaj\u0119 sekcje, kt\u00f3ra pozwoli nam tworzenie zrzut\u00f3w ekranu po ka\u017cdym kroku.<\/p>\n\n\n\n<p>Dodaj\u0119 sekcje \u201estepByStepReport\u201d. W niej ustawiam dwa parametry \u201eenabled\u201d, kt\u00f3ry powoduje, \u017ce raport jest tworzony, oraz parametr \u201escreenshotsForAllureReport\u201d, kt\u00f3ry pozwoli doda\u0107 zrzuty ekranu do raportu Allure.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/stepbystepreport.png\"><img decoding=\"async\" width=\"306\" height=\"90\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/stepbystepreport.png\" alt=\"\" class=\"wp-image-7882\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/stepbystepreport.png 306w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/stepbystepreport-300x88.png 300w\" sizes=\"(max-width: 306px) 100vw, 306px\" \/><\/a><\/figure>\n\n\n\n<p>Kod znajduje si\u0119 tutaj:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/testingplusme\/IntroductionToCodeCeptJS\" rel=\"nofollow\" >https:\/\/github.com\/testingplusme\/IntroductionToCodeCeptJS<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak uruchomi\u0107 testy dla CodeceptJS?<\/h2>\n\n\n\n<p>\u017beby uruchomi\u0107 testy u\u017cywam w konsoli komendy:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nnpx codeceptjs run --steps\n<\/pre><\/div>\n\n\n<p>\u017beby uruchomi\u0107 testy wraz z Allure korzystam w komendzie z pluginu Allure:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nnpx codeceptjs run --plugins allure\n<\/pre><\/div>\n\n\n<p>Generowanie Allure report:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nallure serve output\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_codeceptjs.png\"><img decoding=\"async\" width=\"1920\" height=\"1036\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_codeceptjs.png\" alt=\"\" class=\"wp-image-7881\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_codeceptjs.png 1920w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_codeceptjs-300x162.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/allure_codeceptjs-1024x553.png 1024w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/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\">Podsumowanie<\/h2>\n\n\n\n<p>W dzisiejszym wpisie pokaza\u0142em, w jaki spos\u00f3b mo\u017cemy skorzysta\u0107 z CodeceptJS &#8211; jednego z lepszych framework\u00f3w JS dla Selenium WebDrivera \/ Puppeteer. Kod umie\u015bci\u0142em GitHubie. Strona, kt\u00f3r\u0105 u\u017cywamy w te\u015bcie jest r\u00f3wnie\u017c postawiona przeze mnie, wi\u0119c mo\u017cecie z niej korzysta\u0107 w celach startu przygody z CodeceptJS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Chcesz lepiej zrozumie\u0107 aplikacje i systemy, kt\u00f3re testujesz? Do\u0142\u0105cz do ModernTester, poznaj najpotrzebniejsze narz\u0119dzia, frameworki oraz j\u0119zyki programowania i \u0107wicz na specjalnie przygotowanych \u015brodowiskach testowych: <a href=\"https:\/\/moderntester.sii.pl\/\" rel=\"nofollow\" >Platforma e-learningowa ModernTester<\/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;7879&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;22&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: 22)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;CodeceptJS - Przyjazna automatyzacja test\u00f3w akceptacyjnych dla www!&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: 22)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W dzisiejszym wpisie chcia\u0142bym podzieli\u0107 si\u0119 z frameworkiem do test\u00f3w automatycznych, kt\u00f3ry ma aktywn\u0105 spo\u0142eczno\u015b\u0107 i jest ca\u0142y czas rozwijany. &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/codeceptjs-przyjazna-automatyzacja-testow-akceptacyjnych-dla-www\/\">Continued<\/a><\/p>\n","protected":false},"author":215,"featured_media":8142,"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,814,815],"class_list":["post-7879","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-poradnik","tag-testowanie","tag-codeceptjs","tag-e2e"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/08\/codeceptjs-1.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/7879"}],"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\/215"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=7879"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/7879\/revisions"}],"predecessor-version":[{"id":24554,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/7879\/revisions\/24554"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/8142"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=7879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=7879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=7879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}