{"id":3838,"date":"2017-03-07T09:11:19","date_gmt":"2017-03-07T08:11:19","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=3838"},"modified":"2023-06-01T09:18:49","modified_gmt":"2023-06-01T07:18:49","slug":"automatyzacja-testow-androida-przy-uzyciu-appium","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/automatyzacja-testow-androida-przy-uzyciu-appium\/","title":{"rendered":"Automatyzacja test\u00f3w Androida przy u\u017cyciu Appium"},"content":{"rendered":"\n<p>W ostatnich latach powsta\u0142o wiele narz\u0119dzi do test\u00f3w aplikacji mobilnych. Z miesi\u0105ca na miesi\u0105c w sklepach Google\u2019a czy Apple\u2019a pojawia si\u0119 coraz wi\u0119cej produkt\u00f3w, firmy te wydaj\u0105 coraz to nowsze urz\u0105dzenia, aktualizacje oprogramowania oraz nowe wersje system\u00f3w operacyjnych.<\/p>\n\n\n\n<p>W tej ogromnej macierzy mo\u017cliwo\u015bci testerzy staraj\u0105 si\u0119 znale\u017a\u0107 narz\u0119dzie, dzi\u0119ki kt\u00f3remu uda im si\u0119 sprawdzi\u0107 jak najwi\u0119cej kodu aplikacji przy stosunkowo niskim koszcie czasu i pieni\u0119dzy. Bior\u0105c pod uwag\u0119 wzrastaj\u0105ce wymagania rynkowe oraz wysokie oczekiwania ko\u0144cowych u\u017cytkownik\u00f3w, jest to nieraz k\u0142opotliwe. <a href=\"http:\/\/appium.io\/\" rel=\"nofollow\" >Appium <\/a>pozwala jednak na automatyzacj\u0119 test\u00f3w dla obu wiod\u0105cych platform. W dzisiejszym artykule pokazany zostanie przyk\u0142adowy projekt test\u00f3w dla Androida przy u\u017cyciu tego narz\u0119dzia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WYMAGANIA<\/h2>\n\n\n\n<p>Wszystkie opisane czynno\u015bci zosta\u0142y wykonane na systemie Windows 10.<\/p>\n\n\n\n<p>Aby Appium dzia\u0142a\u0142o poprawnie na komputerze zainstalowane musz\u0105 by\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eclipse<\/li>\n\n\n\n<li>Android SDK i API dla obecnej wersji Androida<\/li>\n\n\n\n<li>Java<\/li>\n\n\n\n<li>\u015acie\u017cki do JAVA_HOME i ANDROID_HOME musz\u0105 by\u015b ustawione w zmiennych \u015brodowiskowych<\/li>\n<\/ul>\n\n\n\n<p>Dodatkowo opcjonalnie zainstalowany mo\u017ce by\u0107 Node.js, ale nie jest to wymagane, poniewa\u017c nowsze wersje Appium maj\u0105 dodane ten program domy\u015blnie. Dodatkowym wymaganiem jest posiadanie biblioteki <a href=\"http:\/\/testng.org\/doc\/download.html\" rel=\"nofollow\" >TestNG <\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">KONFIGURACJA<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u015aci\u0105gamy Selenium i rozpakowujemy pliki w dowolnym miejscu w folderze nazwanym <a href=\"http:\/\/selenium-release.storage.googleapis.com\/2.45\/selenium-java-2.45.0.zip\" rel=\"nofollow\" >Selenium<\/a><\/li>\n\n\n\n<li>\u015aci\u0105gamy <a href=\"https:\/\/bitbucket.org\/appium\/appium.app\/downloads\/\" rel=\"nofollow\" >Appium dla Windowsa<\/a> i rozpakowujemy w folderze nazwanym Appium<\/li>\n\n\n\n<li>\u015aci\u0105gamy jar <a href=\"https:\/\/repo1.maven.org\/maven2\/io\/appium\/java-client\/2.1.0\/java-client-2.1.0.jar\" rel=\"nofollow\" >klienta Javy<\/a> i dodajemy do folderu Appium<\/li>\n<\/ul>\n\n\n\n<p>Instalujemy z folderu Appium program o ten samej nazwie. Otwieramy Eclipse i tworzymy nowy projekt Maven\u2019owy. Klikamy prawym przyciskiem myszy na projekt, wybieramy <em>Properties -&gt; Java Build Path -&gt; Add External JAR\u2019s<\/em>. Do projektu dodajemy jar klienta Javy z folderu Appium, pobrane biblioteki z folderu Selenium, jar TestNG.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap1.png\"><img decoding=\"async\" width=\"948\" height=\"300\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap1.png\" alt=\"properties\" class=\"wp-image-3839\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap1.png 948w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap1-300x95.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap1-768x243.png 768w\" sizes=\"(max-width: 948px) 100vw, 948px\" \/><\/a><\/figure>\n\n\n\n<p>Dobr\u0105 praktyk\u0105 jest dodanie do projektu builda aplikacji, kt\u00f3r\u0105 b\u0119dziemy testowa\u0107. Je\u015bli mamy plik .apk to wystarczy gdy w do projektu dodamy folder o nazwie np. builds i wrzucimy do niego apk\u0119. Co je\u015bli nie mamy zbudowanej aplikacji, a posiadamy j\u0105 tylko zainstalowan\u0105 na urz\u0105dzeniu?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">adb pull CZYLI ZYSKIWANIE BUILDA APLIKACJI<\/h2>\n\n\n\n<p>Je\u015bli nie mamy zbudowanej aplikacji w postaci pliku apk to mo\u017cemy go uzyska\u0107 bezpo\u015brednio z urz\u0105dzenia lub emulatora. W tym celu telefon musi by\u0107 pod\u0142\u0105czony do komputera a emulator musi by\u0107 uruchomiony. &nbsp;Przechodzimy do folderu w kt\u00f3rym znajduje si\u0119 SDK Androida, wchodzimy do <em>platform-tools<\/em>. Uruchamiamy konsol\u0119 i wpisujemy polecenie <em><strong>adb devices<\/strong><\/em>. Powinna pokaza\u0107 si\u0119 lista dost\u0119pnych urz\u0105dze\u0144. W przypadku kiedy jest wi\u0119cej ni\u017c jedno urz\u0105dzenie podpi\u0119te\/uruchomione na komputerze, nale\u017cy w ka\u017cdej dalej przedstawionej komendzie poda\u0107 numer urz\u0105dzenia na kt\u00f3rym dana komenda ma by\u0107 wykonana.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap2.png\"><img decoding=\"async\" width=\"238\" height=\"49\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap2.png\" alt=\"ap2\" class=\"wp-image-3840\"\/><\/a><\/figure>\n\n\n\n<p>Je\u015bli wiemy jak nazywa si\u0119 nasza aplikacja, kt\u00f3rej builda chcemy uzyska\u0107, to musimy na pocz\u0105tek uzyska\u0107 nazw\u0119 jej package\u2019u. W tym celu wpisujemy komend\u0119 listuj\u0105c\u0105 wszystkie zainstalowane aplikacje, kt\u00f3re w nazwie posiadaj\u0105 zadany przez nas parametr:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap3.png\"><img decoding=\"async\" width=\"423\" height=\"37\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap3.png\" alt=\"ap3\" class=\"wp-image-3841\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap3.png 423w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap3-300x26.png 300w\" sizes=\"(max-width: 423px) 100vw, 423px\" \/><\/a><\/figure>\n\n\n\n<p>W wynikach zapytania szukamy interesuj\u0105cej nas aplikacji. Komenda pokazuje nazw\u0119 packagu oraz \u015bcie\u017ck\u0119, w jakiej aplikacja si\u0119 znajduje.<\/p>\n\n\n\n<p>&nbsp;Kolejnym krokiem b\u0119dzie wykonanie pulla aplikacji z urz\u0105dzenia na komputer. W tym celu pos\u0142u\u017cymy si\u0119 komend\u0105 pull jako parametr podaj\u0105c wylistowan\u0105 wcze\u015bniej \u015bcie\u017ck\u0119:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap4.png\"><img decoding=\"async\" width=\"843\" height=\"46\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap4.png\" alt=\"ap4\" class=\"wp-image-3842\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap4.png 843w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap4-300x16.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap4-768x42.png 768w\" sizes=\"(max-width: 843px) 100vw, 843px\" \/><\/a><\/figure>\n\n\n\n<p>W folderze <em>platform-tools<\/em> zobaczymy nowy plik: <strong>base.apk<\/strong>. Jest to nasza zbudowana aplikacja pobrana z urz\u0105dzenia. Kolejnym krokiem jest pobranie z builda informacji o aktywno\u015bci startowej, aby mo\u017cna by\u0142o w pe\u0142ni stworzy\u0107 DesiredCapabilities dla Appium. W tym celu pos\u0142u\u017cymy si\u0119 poleceniem <em><strong>aapt dump<\/strong><\/em>. By uruchomi\u0107 jednak program aapt musimy przej\u015b\u0107 do folderu <em>build-tools<\/em>, wej\u015b\u0107 w folder z numerem SDK ( u mnie 23.0.3).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap5.png\"><img decoding=\"async\" width=\"962\" height=\"148\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap5.png\" alt=\"ap5\" class=\"wp-image-3843\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap5.png 962w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap5-300x46.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap5-768x118.png 768w\" sizes=\"(max-width: 962px) 100vw, 962px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap6.png\"><img decoding=\"async\" width=\"832\" height=\"39\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap6.png\" alt=\"ap6\" class=\"wp-image-3844\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap6.png 832w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap6-300x14.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap6-768x36.png 768w\" sizes=\"(max-width: 832px) 100vw, 832px\" \/><\/a><\/figure>\n\n\n\n<p>Powy\u017cej wida\u0107 wszelkie niezb\u0119dne informacje na temat aplikacji, jak wersja minimalna systemu, permissions, nazwa paczki itd. Nas jednak interesuje informacja zawarta nieco ni\u017cej, mianowicie wynik warto\u015bci<em> launchable-activity<\/em>. Po ostatniej kropce znajduje si\u0119 nazwa aktywno\u015bci startowej, kt\u00f3rej w\u0142a\u015bnie szukali\u015bmy. Maj\u0105c ju\u017c wszystkie niezb\u0119dne informacje mo\u017cemy przej\u015b\u0107 do Eclipse i Appium.<\/p>\n\n\n\n<p>Oczywi\u015bcie mo\u017cemy skorzysta\u0107 tak\u017ce z gotowych aplikacji umo\u017cliwiaj\u0105cych zczytywanie danych, jak np. <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.intelloware.apkinfo&amp;hl=pl\" rel=\"nofollow\" ><em><strong>APK Info<\/strong><\/em><\/a>, kt\u00f3ra pokazuje szczeg\u00f3\u0142owe informacje na temat wybranej aplikacji:<\/p>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2017-02-06-16-12-411-169x300-1.png\"><img decoding=\"async\" width=\"169\" height=\"300\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2017-02-06-16-12-411-169x300-1.png\" alt=\"\" class=\"wp-image-22101\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2017-02-06-16-12-551-169x300-1.png\"><img decoding=\"async\" width=\"169\" height=\"300\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2017-02-06-16-12-551-169x300-1.png\" alt=\"\" class=\"wp-image-22103\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/Screenshot_2017-02-06-16-12-411.png\"> <\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">APPIUM<\/h2>\n\n\n\n<p>Przechodzimy do Appium. Klikamy na robota androidowego aby przej\u015b\u0107 do ustawie\u0144. W sekcji <em>Capabilities<\/em> podajemy nazw\u0119 urz\u0105dzenia, na kt\u00f3rym uruchamiane b\u0119d\u0105 testy. Je\u015bli nie wiemy jak nasze urz\u0105dzenia identyfikowane jest w systemie to wystarczy, \u017ce komend\u0119 <strong><em>adb devices<\/em><\/strong> uruchomimy z parametrem dodatkowym <strong><em>\u2013l<\/em><\/strong>. Nazwa urz\u0105dzenia podana jest po <em><strong>model=<\/strong><\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap7.png\"><img decoding=\"async\" width=\"665\" height=\"49\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap7.png\" alt=\"ap7\" class=\"wp-image-3847\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap7.png 665w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap7-300x22.png 300w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/><\/a><\/figure>\n\n\n\n<p>W sekcji <em>Application<\/em> podajemy \u015bcie\u017ck\u0119 do pliku base.apk. I to wszystko, mo\u017cemy teraz uruchomi\u0107 serwer appium klikaj\u0105c w strza\u0142k\u0119 Run. Po chwili serwer startuje co wida\u0107 w wy\u015bwietlanych logach:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap8.png\"><img decoding=\"async\" width=\"861\" height=\"268\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap8.png\" alt=\"ap8\" class=\"wp-image-3848\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap8.png 861w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap8-300x93.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap8-768x239.png 768w\" sizes=\"(max-width: 861px) 100vw, 861px\" \/><\/a><\/figure>\n\n\n\n<p>Serwer uruchamia si\u0119 na domy\u015blnym porcie 4723 o adresie IP 127.0.0.1 i dobrze jest tego nie zmienia\u0107. Innymi mo\u017cliwymi opcjami jest adres 0.0.0.0 i port 4725. Serwer nale\u017cy skonfigurowa\u0107 tak, aby podane parametry zgadza\u0142y si\u0119 z minimalnymi wymaganiami aplikacji, kt\u00f3re zczytali\u015bmy z konsoli. Kiedy serwer jest ju\u017c uruchomiony mo\u017cemy przej\u015b\u0107 do Eclipse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ECLIPSE<\/h2>\n\n\n\n<p>W naszym projekcie Mavenowym tworzymy now\u0105 klas\u0119. Na pocz\u0105tek nale\u017cy ustawi\u0107 <em>Desired Capabilities<\/em>, czyli zestaw kluczy i warto\u015bci, kt\u00f3re wysy\u0142amy do serwera Appium aby poinformowa\u0107 go &nbsp;jakim rodzajem sesji jeste\u015bmy zainteresowani i co b\u0119dzie testowane. Wymaganym minimum s\u0105 warto\u015bci dla <em>deviceName, appPackage<\/em> i <em>appActivity<\/em>. Teraz mo\u017cemy zainicjowa\u0107 drivera, dzi\u0119ki kt\u00f3remu b\u0119dziemy testowa\u0107 aplikacj\u0119.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap9.png\"><img decoding=\"async\" width=\"689\" height=\"341\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap9.png\" alt=\"ap9\" class=\"wp-image-3849\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap9.png 689w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap9-300x148.png 300w\" sizes=\"(max-width: 689px) 100vw, 689px\" \/><\/a><\/figure>\n\n\n\n<p>Kolejne kroki s\u0105 ju\u017c takie jak dla typowych test\u00f3w przy u\u017cyciu Selenium: wyszukujemy elementy, wykonujemy akcje, wstawiamy asercj\u0119 w celu weryfikacji poszczeg\u00f3lnych krok\u00f3w. Ale jak zdoby\u0107 informacje na temat testowanego widoku? W tym celu pos\u0142u\u017cymy si\u0119 ponownie SDK Androida i narz\u0119dziem UIAutomatorViewer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">UIAutomatorViewer<\/h2>\n\n\n\n<p>Narz\u0119dzie to znajdziemy w SDK w folderze <em>tools<\/em>. Dzi\u0119ki niemu mo\u017cemy uzyskiwa\u0107 informacje na temat hierarchii element\u00f3w w widoku, idki i inne atrybuty. Aplikacja, kt\u00f3r\u0105 chcemy zbada\u0107 powinna by\u0107 uruchomiona na urz\u0105dzeniu. Wybieramy przycisk <em>Device Screenshot<\/em> i czekamy a\u017c poka\u017ce si\u0119 widok, na kt\u00f3rym mo\u017cemy wskaza\u0107 mysz\u0105 element, kt\u00f3rego warto\u015bci nas interesuj\u0105. Dop\u00f3ki nie wybierzemy go poprzez klikni\u0119cie, warto\u015bci sfocusowanych element\u00f3w b\u0119d\u0105 od\u015bwie\u017ca\u0142y si\u0119 dynamicznie.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap10.png\"><img decoding=\"async\" width=\"973\" height=\"657\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap10.png\" alt=\"ap10\" class=\"wp-image-3850\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap10.png 973w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap10-300x203.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap10-768x519.png 768w\" sizes=\"(max-width: 973px) 100vw, 973px\" \/><\/a><\/figure>\n\n\n\n<p>Kiedy mamy ju\u017c wszystkie niezb\u0119dne informacje na temat konfiguracji \u015brodowiska, aplikacji i napisali\u015bmy ju\u017c kod, mo\u017cemy przyst\u0105pi\u0107 do jego uruchomienia. Poniewa\u017c testy powinny by\u0107 jak naj\u0142atwiejsze w utrzymaniu i dobr\u0105 praktyk\u0105 jest niedublowanie kodu, nale\u017cy rozbija\u0107 czynno\u015bci na jak najmniejsze metody. W tym kr\u00f3tkim przyk\u0142adzie nie ma to sensu, ale w przypadku bardziej z\u0142o\u017conych test\u00f3w jest to wskazane. Podczas tworzenia projektu wygenerowa\u0142 si\u0119 folder <em>src\/test\/java<\/em> a w nim plik <em>NazwaKlasyTest.java.<\/em> Zawiera on wygenerowany z automatu kod dziedzicz\u0105cy po junitowym TestCase. W metodzie <em>testApp()<\/em> wywo\u0142uj\u0119 metod\u0119 napisan\u0105 w klasie App. Ca\u0142o\u015b\u0107 uruchamiam poprzez klikni\u0119cie prawego przycisku i <em>Run as -&gt; JUnit test.<\/em> W Appium pojawiaj\u0105 si\u0119 logi \u015bwiadcz\u0105ce o uruchomieniu testu, na urz\u0105dzeniu widzimy akcje, kt\u00f3re zaprogramowali\u015bmy.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap11.png\"><img decoding=\"async\" width=\"840\" height=\"294\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap11.png\" alt=\"ap11\" class=\"wp-image-3851\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap11.png 840w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap11-300x105.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/ap11-768x269.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><\/figure>\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;3838&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;4&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;4\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;Automatyzacja test\u00f3w Androida przy u\u017cyciu Appium&quot;,&quot;width&quot;:&quot;127&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&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: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 127px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            4\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W ostatnich latach powsta\u0142o wiele narz\u0119dzi do test\u00f3w aplikacji mobilnych. Z miesi\u0105ca na miesi\u0105c w sklepach Google\u2019a czy Apple\u2019a pojawia &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/automatyzacja-testow-androida-przy-uzyciu-appium\/\">Continued<\/a><\/p>\n","protected":false},"author":37,"featured_media":3852,"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":[464,279,354,368,465,146],"class_list":["post-3838","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-android","tag-appium","tag-automatyzacja","tag-eclipse","tag-konsola","tag-testing"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/02\/logo_appium_adb.png","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/3838"}],"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\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=3838"}],"version-history":[{"count":4,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/3838\/revisions"}],"predecessor-version":[{"id":22105,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/3838\/revisions\/22105"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/3852"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=3838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=3838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=3838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}