UIAutomatorViewer Tutorial: Inspektør for Android Test

⚡ Smart opsummering

UIAutomatorViewer er en grafisk inspektør, der følger med Android SDK, der tager et skærmbillede af enheden, gengiver visningshierarkiet og eksponerer attributterne Appium skal kunne lokalisere knapper, felter og etiketter pålideligt.

  • 🔘 Hvad det gør: Scanner en live Android skærm og viser nodehierarkiet ved siden af ​​et egenskabsark for det valgte element.
  • ☑️ Hvor den bor: Affyringsrampen sidder i Android SDK-værktøjsmappen som uiautomatorviewer.bat og starter en Java skrivebordsvindue.
  • Optagelsesflow: Slå udviklerindstillinger til, tilslut håndsættet via USB, og tryk derefter på Enhedsskærmbillede for at indlæse det aktuelle skærmbillede.
  • 🧪 Attributkortping: tekst bliver navn, ressource-id bliver id, klasse bliver klassenavn, og indholdsbeskrivelse bliver tilgængeligheds-id'et.
  • 🛠️ Fejlfinding: Beskeden "Nej Android "Enheder blev fundet af adb" peger næsten altid på et kabel, en driver eller en fejlfindingsindstilling.
  • 📊 Moderne mulighed: Appium Inspektør dækker Android og iOS og forbliver tilgængelig efter at den ældre SDK-værktøjspakke blev trukket tilbage.

UIAutomatorViewer-inspektør til Android applikationstestning

Hvad er UIAutomatorViewer?

UIAutomatorViewer er et GUI-værktøj til at scanne og analysere UI-komponenterne i en Android applikation. For at automatisere enhver Android applikation ved hjælp af Appium, skal en bruger identificere objekterne i AUT (Application Under Test). Med UIAutomatorViewer kan du inspicere brugergrænsefladen for en Android applikation til at finde hierarkiet og se forskellige egenskaber (id, tekst…) for elementet.

Mens du udfører automatiseringsscripts, Appium bruger UIAutomatorViewer til at identificere forskellige egenskaber ved objektet og bruger egenskaberne til at identificere det ønskede objekt. Den ene idé – at læse attributten i inspektøren og derefter genbruge den som en locator i scriptet – er det, resten af ​​denne side gennemgår.

Skærmbilledet nedenfor viser værktøjet i dets normale driftstilstand: skærmbilledet for den optagne enhed til venstre, nodetræet øverst til højre og egenskabsarket for den valgte node nedenunder.

UIAutomatorViewer-vindue, der viser den optagede enhedsskærm, nodehierarkitræet og nodedetaljepanelet

Forudsætninger for brug af UIAutomatorViewer

Inspektøren læser liveskærmen på et rigtigt håndsæt eller en emulator, så en lille smule opsætning skal være på plads, før vinduet overhovedet viser noget.

  • A Java Udviklingssæt: uiautomatorviewer er en Java desktop-applikation startet af et batchscript, så en JDK skal være installeret og tilgængelig på systemstien.
  • Android SDK'er: seeren leveres inden for SDK'et værktøjer mappe, så SDK'et skal installeres, før launcheren findes på disken.
  • Platformværktøjer og adb: seeren taler til enheden via Android Debug Bridge, så adb skal være installeret og kunne se håndsættet.
  • Udviklerindstillinger og USB-fejlfinding: begge skal være aktiveret i enhedsindstillingerne, ellers viser adb aldrig enheden.
  • Et data-kompatibelt USB-kabel og driver: et opladningskabel eller en manglende producentdriver på Windows, producerer en tom enhedsliste.
  • Applikationen under test: Appen skal installeres og åbnes på enheden, fordi inspektøren optager det, der aktuelt er på skærmen.

Med disse seks elementer på plads er downloadtrinnet kort.

Sådan downloader og installerer du UIAutomatorViewer

UIAutomatorViewer er en del af Android SDK-administratoren vil være tilgængelig, når du har installeret SDK-administratoren. Download og installer Android SDK fra den officielle Android Studio download siden.

Når Android SDK'et er installeret, skal du navigere til denne sti:

c:\users\<username>\AppData\Local\Android\sdk\tools

Du vil se en batchfil med dette navn:

uiautomatorviewer.bat

Double Klik på den for at starte UIAutomatorViewer GUI. Mappelisten ser ud som den nedenfor, hvor batchfilen ligger ved siden af ​​de andre SDK-værktøjer.

Android SDK-værktøjsmappe i Windows Explorer, der indeholder uiautomatorviewer batch launcheren

⚠️ Versionsnotat: Android's egen UI Automator-dokumentation beskriver stadig, hvordan man starter værktøjet fra /værktøjer/, men den forældede selvstændige Android SDK-værktøjer Pakken tilbydes ikke længere af SDK Manager i den nuværende Android Studio udgivelser. Langvarige installationer og ældre SDK-arkiver indeholder stadig launcheren; på en ny installation er filen normalt fraværende, og Appium Inspector er den praktiske erstatning. De originale trin ovenfor bevares, fordi de forbliver korrekte for enhver maskine, der stadig har værktøjsmappen.

Sådan bruger du UIAutomatorViewer til at finde objekter i din applikation

Optagelsessekvensen er altid den samme: klargør enheden, placer den skærm, du er interesseret i, foran kameraet, og tag derefter snapshottet.

  1. Aktiver udvikler muligheder på din enhed. Læs Android's vejledning til konfiguration af udviklerindstillinger på enheden for at se, hvordan man aktiverer udviklerindstillinger Android enheder.
  2. Tilslut din Android enheden til pc'en via et USB-kabel.
  3. Vælg "Guru99"-appen fra programlisten, som vist nedenfor.

Guru99 applikationer valgt fra Android liste over enhedens applikationer

  1. Klik på knappen Skærmbillede af enheden knappen for at opdatere UIAutomatorViewer og indlæse Guru99 applikationens GUI i værktøjet. Knappen er placeret i værktøjslinjen, der er fremhævet nedenfor.

Knap på værktøjslinjen til skærmbillede af enhed, der bruges til at opdatere UIAutomatorViewer-optagelsen

  1. Når opdateringen er fuldført, vises et skærmbillede af Guru99-applikationen åbnes i venstre rude.

Captured Guru99 applikationsskærm indlæst i venstre rude af UIAutomatorViewer

  1. Som du ser på billedet ovenfor, er der 2 paneler i højre side af vinduet.

Det øverste panel indeholder nodehierarkiet – den måde, brugergrænsefladekomponenterne er arrangeret og indeholdt på. Ved at klikke på hver node vises egenskaberne for det pågældende brugergrænsefladeelement i det nederste panel.

  1. Vælg knappen 'Quiz' i billedet ovenfor for at se dens forskellige egenskaber (tekst, ressource-id...).

Quiz-knap valgt i nodetræet med dens egenskaber angivet i det nederste detaljepanel

Sådan bruger du disse egenskaber til at identificere elementer til automatisering

Du kan ikke bruge egenskaberne direkte – hver egenskab har et andet navn i automatiserings-API'en. Lad os se, hvordan vi bruger disse egenskabsværdier. Følgende attributter kan bruges til at identificere knappen 'Quiz' i Guru99 applikationer.

Attribut i UIAutomatorViewer Lokaliseringsnavn i scriptet Typisk brug
tekst navn Synlig etiket på en knap eller et statisk felt
ressource-id id Det mest stabile valg, når udvikleren sætter et
klasse klassenavn Valg af en gruppe widgets af samme type
indhold-desc tilgængeligheds-id Cross-platform locator, der også hjælper skærmlæsere

Hvert kortping er synlig direkte i nodedetaljepanelet. tekst Attributten kan bruges som "navn", som egenskabsrækken nedenfor viser.

Nodedetaljerække, der viser den tekstattributværdi, der bruges som navnelokaliseringsværktøj

ressource-id Attributten kan bruges som "id".

Nodedetaljerække, der viser den ressource-id-attributværdi, der bruges som id-lokaliseringsfunktion.

klasse Attributten kan bruges som "className".

Nodedetaljerække, der viser den klasseattributværdi, der bruges som className-lokaliseringsfunktion.

indhold-desc Attributten kan bruges som "AcceptabilityId".

Nodedetaljerække, der viser den content-desc-attributværdi, der bruges som tilgængeligheds-id-lokaliseringsfunktion.

Sammen med ovenstående attributter kan vi skrive XPaths til objektidentifikation. Disse attributnavne er også det, du sender igennem. ønskede evner og lokaliseringsstrategier, når scriptet kører.

Sådan bygger du XPath-lokaliseringsværktøjer fra UIAutomatorViewer-attributter

XPath er reservefunktionen, når ingen enkelt attribut er unik i sig selv. Nodedetaljeringspanelet giver dig alle de værdier, udtrykket har brug for, så en XPath er egentlig bare den attribut, du allerede har læst, skrevet i prædikatform.

Arbejd dig igennem panelet i denne rækkefølge:

  1. Vælg noden i det øverste panel og læs dens klasse, tekst, ressource-id og indhold-desc værdier i det nederste panel.
  2. Foretræk en enkelt stabil attribut. Hvis resource-id er udfyldt, brug det og stop - XPath er ikke nødvendig.
  3. Hvis intet er unikt, kombiner to attributter i ét prædikat.
  4. Hvis etiketten ændres under kørsel, skal du skifte lighedstesten til et delvist match.

Mønstrene nedenfor bruger attributnavnene præcis som UIAutomatorViewer rapporterer dem.

<!-- match on the visible label -->
//*[@text='Quiz']

<!-- match on the resource-id reported by the viewer -->
//*[@resource-id='com.example.app:id/quiz_button']

<!-- match on the widget class -->
//android.widget.Button[@text='Quiz']

<!-- partial match when the label is dynamic -->
//*[contains(@text,'Qui')]

<!-- two attributes combined for a unique match -->
//*[@class='android.widget.Button' and @content-desc='Quiz']

Et par regler forhindrer disse udtryk i at blive skrøbelige. Absolutte stier, der går gennem hele træet, brydes i det øjeblik, en udvikler pakker et layout ind i endnu en container, så start hvert udtryk med den dobbelte skråstreg og match i stedet på en attribut. Indeksbaserede prædikater opfører sig på samme måde - de overlever, indtil skærmen får en række. Og et udtryk, der er unikt på en telefonskærm, kan matche flere noder på et tabletlayout, så undersøg den samme skærm igen på begge formfaktorer, før du promoverer locatoren til en suite. Den samme disciplin gælder for XPath ind Selenium, hvor træet er en DOM snarere end et visningshierarki.

Fejl man kan støde på under brug af UIAutomatorViewer

De fleste fejl sker, før en enkelt node er tegnet, og næsten alle af dem handler om forbindelsen mellem arbejdsstationen og håndsættet.

  • Jeg ser fejlen — "Nej Android "Enheder blev registreret af adb" — som vist på skærmbilledet nedenfor. Hvordan kan jeg løse dette?

UIAutomatorViewer-dialogboks rapporterer, at nej Android enheder blev registreret af adb

Opløsning: Sørg for, at din enhed er tilsluttet pc'en.

Tabellen nedenfor udvider dette svar til de andre meddelelser, som testerne oftest rammer.

Symptom Sandsynlig årsag Fix
Ingen Android enheder blev registreret af adb Enhed ikke tilsluttet, USB-fejlfinding slået fra eller et kabel kun til opladning Genopret forbindelse med et datakabel, aktiver USB-fejlfinding, og bekræft derefter, at håndsættet vises på ADB-enhedslisten
Enhed angivet som uautoriseret RSA-fingeraftryksprompten blev aldrig accepteret på håndsættet Lås skærmen op, tilslut igen, og tryk på Tillad USB-fejlfinding
uiautomatorviewer.bat mangler Den forældede SDK-værktøjspakke er ikke installeret Brug en eksisterende SDK-installation, der stadig indeholder den, eller skift til Appium Inspector
Hierarkiet er tomt, eller optagelsen mislykkes Skærmen ændrede sig under dumpen, eller appen blokerer skærmoptagelsen Hold skærmen stille, og tag et nyt snapshot; sikre skærmbilleder kan ikke optages
WebView-indhold vises som en enkelt node Seeren læser kun native visninger Undersøg webindhold med browserudviklerværktøjer eller en inspektør, der understøtter webkontekst

UIAutomatorViewer vs. Appium Inspektør vs. Layoutinspektør

Tre inspektører bruges almindeligvis imod Android skærme, og de løser lidt forskellige problemer.

Kriterium UIAutomatorViewer Appium Inspector Android Studio Layoutinspektør
Sendes med Arven Android SDK-værktøjspakke En selvstændig desktopapplikation Android Studio
Inspicerede platforme Android kun Android og iOS Android kun
Kræver en kørende server Nej, den taler direkte til adb Ja, den forbinder sig til en Appium serversession Nej, den er knyttet til en fejlfindingsproces
Genererer lokaliseringskode Nej, værdierne kopieres manuelt Ja, den foreslår lokatorer og kan registrere handlinger Nej, det er en fejlfindingsvisning
Bedst egnet til En hurtig attributopslag på en ældre opsætning Opbygning og validering af lokaliseringspunkter for en suite Diagnosticering af layout- og renderingsproblemer

For en suite, der allerede løber igennem Appium, er Inspector den naturlige efterfølger: den læser de samme attributter, kører den samme UiAutomator2-driver nedenunder og fungerer også mod iOS. Appium Inspektørprojekt frigives aktivt, så det er det sikrere valg til nyt arbejde, mens Layout Inspector forbliver nyttig, når spørgsmålet er, hvorfor en visning gengives mærkeligt, snarere end hvordan man skal håndtere det. Hvis du stadig vælger en stak, er den bredere sammenligning i vores guide til værktøjer til test af mobilapps er et godt næste skridt, og eksempler på mobile testcases vis, hvad disse lokaliseringspunkter i sidste ende fører til.

Ofte Stillede Spørgsmål

Kun delvist. Vieweren læser det native visningshierarki, så en WebView vises normalt som én uigennemsigtig node. Undersøg HTML'en i den med browserudviklerværktøjer, eller brug en inspektør, der kan skifte til webkonteksten.

Nej. Værktøjet er bundet til Android Debug Bridge og Android vis hierarki. Brug til iOS-skærme Appium Inspector or Xcode's tilgængelighedsinspektør, som i stedet læser XCUITest-elementtræet.

Kommandoen skriver det samme hierarki til en XML-fil på enheden, uden grafik. Det er nyttigt i scripts og på headless-maskiner, men du mister skærmbilledet, der gør det hurtigt at finde den rigtige node.

Maskinlæringslokaliseringsmotorer scorer flere attributter sammen – tekst, klasse, position og tilstødende noder – og genfinder elementet, når en af ​​dem ændres. Denne selvreparerende adfærd reducerer fejl forårsaget af et omdøbt id.

Ja. Indsæt attributværdierne i en kommentar, så vil Copilot normalt udarbejde det matchende side-objektfelt og klikmetoden. Verificér altid den genererede locator mod liveskærmen, da forslaget er et gæt, ikke et opslag.

Nej. Fremviseren fungerer mod det installerede build på enheden, så en APK, du ikke har kompileret, kan stadig inspiceres. Kun attributter, som udvikleren rent faktisk har angivet, såsom resource-id og content-desc, vil blive udfyldt.

Ja. En emulator ser ud til at ADB præcis som en fysisk håndsæt, så knappen Enhedsskærmbillede optager det på samme måde. Emulatorer er praktiske til tidlig scripting, selvom de endelige kørsler hører hjemme på rigtig hardware.

Det giver hver kontrol et stabilt, sproguafhængigt handle, der både fungerer som tilgængeligheds-id'et i et script og som den etiket, en skærmlæser annoncerer. Testpålidelighed og tilgængelighed forbedres med den samme ændring på én linje.

Opsummer dette indlæg med: