UIAutomatorViewer Handledning: Inspektör för Android Testning

⚡ Smart sammanfattning

UIAutomatorViewer är en grafisk inspektör som ingår i Android SDK som tar en skärmdump av enheten, renderar vyhierarkin och exponerar attributen Appium behöver lokalisera knappar, fält och etiketter tillförlitligt.

  • 🔘 Vad den gör: Skannar en live Android skärmen och visar nodhierarkin bredvid en egenskapslista för det valda elementet.
  • ☑️ Var den bor: Utskjutaren sitter i Android SDK-verktygsmappen som uiautomatorviewer.bat och startar en Java skrivbordsfönstret.
  • Fångstflöde: Aktivera utvecklaralternativ, anslut handenheten via USB och tryck sedan på Skärmdump av enhet för att ladda den aktuella skärmen.
  • 🧪 Attributkartaping: text blir namn, resurs-id blir id, klass blir klassnamn och innehållsbeskrivning blir tillgänglighets-id:t.
  • 🛠️ Felsökning: Meddelandet "Nej Android "enheter upptäcktes av adb" pekar nästan alltid på en kabel, drivrutin eller felsökningsinställning.
  • 📊 Modernt alternativ: Appium Inspektörens täckmantel Android och iOS och förblir tillgänglig efter att det äldre SDK-verktygspaketet togs ur bruk.

UIAutomatorViewer-inspektör för Android applikationstestning

Vad är UIAutomatorViewer?

UIAutomatorViewer är ett grafiskt gränssnittsverktyg för att skanna och analysera gränssnittskomponenterna i en Android applikation. För att automatisera alla Android applikation med Appium, behöver en användare identifiera objekten i AUT (Application Under Test). Med UIAutomatorViewer kan du inspektera användargränssnittet för en Android applikation för att ta reda på hierarkin och visa olika egenskaper (id, text…) för elementet.

När du kör automatiseringsskript, Appium använder UIAutomatorViewer för att identifiera olika egenskaper hos objektet och använder egenskaperna för att identifiera det önskade objektet. Den enda idén – att läsa attributet i inspektören och sedan återanvända det som en positionerare i skriptet – är vad resten av den här sidan går igenom.

Skärmdumpen nedan visar verktyget i normalt arbetsläge: skärmen för den hämtade enheten till vänster, nodträdet uppe till höger och egenskapssidan för den valda noden under det.

UIAutomatorViewer-fönster som visar skärmen för den inspelade enheten, nodhierarkiträdet och noddetaljpanelen

Förutsättningar för att använda UIAutomatorViewer

Inspektören läser av liveskärmen på en riktig handenhet eller emulator, så en liten mängd inställningar måste vara på plats innan fönstret visar någonting alls.

  • A Java Utvecklingskit: uiautomatorviewer är en Java skrivbordsapplikationen startades av ett batchskript, så en JDK måste vara installerad och nåbar på systemsökvägen.
  • Ocuco-landskapet Android SDK: tittaren levereras inuti SDK:n verktyg mappen, så SDK:t måste installeras innan startprogrammet finns på disken.
  • Plattformverktyg och adb: tittaren pratar med enheten via Android Felsökningsbrygga, så adb måste vara installerad och kunna se handenheten.
  • Utvecklaralternativ och USB-felsökning: båda måste vara aktiverade i enhetsinställningarna, annars listar adb aldrig enheten.
  • En datakapabel USB-kabel och drivrutin: en laddningskabel eller en saknad drivrutin från tillverkaren Windows, producerar en tom enhetslista.
  • Applikationen som testas: Appen måste installeras och öppnas på enheten, eftersom inspektören fångar det som för närvarande visas på skärmen.

Med de sex punkterna på plats är nedladdningssteget kort.

Hur man laddar ner och installerar UIAutomatorViewer

UIAutomatorViewer är en del av Android SDK-hanteraren och kommer att vara tillgänglig när du har installerat SDK-hanteraren. Ladda ner och installera Android SDK från den officiella Android Studio ladda sidan.

När Android SDK är installerat, navigera till den här sökvägen:

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

Du kommer att se en batchfil med detta namn:

uiautomatorviewer.bat

Double Klicka på den för att starta UIAutomatorViewer GUI. Mapplistan ser ut som den nedan, med batchfilen bredvid de andra SDK-verktygen.

Android SDK-verktygsmappen i Windows Utforskaren som innehåller batchstartaren för uiautomatorviewer

⚠️ Versionsnotering: Androids egen UI Automator-dokumentation beskriver fortfarande hur man startar verktyget från /verktyg/, men den föråldrade fristående Android SDK-verktyg paketet erbjuds inte längre av SDK Manager i nuvarande Android Studio utgåvor. Långvariga installationer och äldre SDK-arkiv innehåller fortfarande startprogrammet; på en ny installation saknas filen vanligtvis, och Appium Inspector är den praktiska ersättningen. De ursprungliga stegen ovan behålls eftersom de förblir korrekta för alla maskiner som fortfarande har verktygsmappen.

Hur man använder UIAutomatorViewer för att hitta objekt i din applikation

Bildtagningssekvensen är alltid densamma: förbered enheten, placera skärmen du bryr dig om framför kameran och ta sedan ögonblicksbilden.

  1. Möjliggöra utvecklingsalternativ på din enhet. Läs Androids guide för att konfigurera utvecklaralternativ på enheten för att se hur man aktiverar utvecklaralternativ på Android enheter.
  2. Anslut Android enheten till datorn via en USB-kabel.
  3. Välj "Guru99”-appen från programlistan, som visas nedan.

Guru99 applikationer valda från Android lista över enheters program

  1. Klicka på Skärmdump av enheten knappen för att uppdatera UIAutomatorViewer och för att ladda Guru99-applikationens grafiska gränssnitt i verktyget. Knappen finns i verktygsfältet markerat nedan.

Knapp i verktygsfältet för skärmdump av enhet som används för att uppdatera UIAutomatorViewer-bilden

  1. När uppdateringen är klar visas en skärmdump av Guru99-applikationen öppnas i den vänstra rutan.

Fångad Guru99-applikationsskärmen laddades i den vänstra rutan i UIAutomatorViewer

  1. Som du ser i bilden ovan finns det två paneler på höger sida av fönstret.

Den övre panelen innehåller nodhierarkin – hur UI-komponenterna är ordnade och inneslutna. Genom att klicka på varje nod visas egenskaperna för det UI-elementet i den nedre panelen.

  1. Välj knappen "Quiz" i bilden ovan för att se dess olika egenskaper (text, resurs-id...).

Quiz-knappen är vald i nodträdet med dess egenskaper listade i den nedre detaljpanelen

Hur man använder dessa egenskaper för att identifiera element för automatisering

Du kan inte använda egenskaperna direkt – varje egenskap har ett annat namn i automatiserings-API:et. Låt oss se hur man använder dessa egenskapsvärden. Följande attribut kan användas för att identifiera knappen "Quiz" i Guru99 appar.

Attribut i UIAutomatorViewer Lokaliseringsnamn i skriptet Typisk användning
text namn Synlig etikett på en knapp eller ett statiskt fält
resurs-id id Det mest stabila valet när utvecklaren sätter ett
klass classname Välja en grupp widgetar av samma typ
innehåll-desc tillgänglighets-ID Plattformsoberoende sökare som även hjälper skärmläsare

Varje kartaping syns direkt i nodens detaljpanel. Den text attributet kan användas som "namn", vilket egenskapsraden nedan visar.

Noddetaljrad som visar textattributvärdet som används som namnsökare

Ocuco-landskapet resurs-id Attributet kan användas som "id".

Noddetaljrad som visar attributvärdet för resurs-id som används som id-lokalisering

Ocuco-landskapet klass Attributet kan användas som "className".

Noddetaljrad som visar klassattributvärdet som används som className-lokaliserare

Ocuco-landskapet innehåll-desc Attributet kan användas som ”AccessibilityId”.

Noddetaljrad som visar värdet för content-desc-attributet som används som lokaliserings-ID för tillgänglighetsfunktioner.

Tillsammans med ovanstående attribut kan vi skriva XPaths för objektidentifiering. Dessa attributnamn är också vad du skickar igenom. önskade förmågor och lokaliseringsstrategier när skriptet körs.

Hur man bygger XPath-lokaliseringar från UIAutomatorViewer-attribut

XPath är reservfunktionen när inget enskilt attribut är unikt i sig. Nodens detaljpanel ger dig alla värden som uttrycket behöver, så ett XPath är egentligen bara det attribut du redan läst, skrivet i predikatform.

Arbeta igenom panelen i denna ordning:

  1. Markera noden i den övre panelen och läs dess klass, text, resurs-id och innehåll-desc värdena i den nedre panelen.
  2. Föredra ett enda stabilt attribut. Om resurs-id är ifyllt, använd det och stoppa — ingen XPath behövs.
  3. Om inget är unikt, kombinera två attribut i ett predikat.
  4. Om etiketten ändras under körning, byt likhetstestet mot en partiell matchning.

Mönstren nedan använder attributnamnen exakt så som UIAutomatorViewer rapporterar 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']

Några regler hindrar dessa uttryck från att bli sköra. Absoluta sökvägar som går genom hela trädet bryts i det ögonblick en utvecklare lägger in en layout i ytterligare en container, så börja varje uttryck med det dubbla snedstrecket och matcha på ett attribut istället. Indexbaserade predikat beter sig på samma sätt – de överlever tills skärmen får en rad. Och ett uttryck som är unikt på en telefonskärm kan matcha flera noder på en surfplattelayout, så inspektera samma skärm på båda formfaktorerna innan du flyttar upp lokaliseringen till en svit. Samma disciplin gäller för XPath in Selenium, där trädet är en DOM snarare än en vyhierarki.

Fel man kan stöta på när man använder UIAutomatorViewer

De flesta fel inträffar innan en enda nod har ritats, och nästan alla av dem beror på anslutningen mellan arbetsstationen och handenheten.

  • Jag ser felet — ”Nej Android enheter upptäcktes av adb” — som visas på skärmdumpen nedan. Hur kan jag lösa detta?

UIAutomatorViewer-dialogrutan rapporterar att nej Android enheter upptäcktes av adb

Lösning: Se till att din enhet är ansluten till datorn.

Tabellen nedan utökar det svaret till de andra meddelanden som testarna oftast träffar.

Symptom Trolig orsak Fast
Nej Android enheter upptäcktes av adb Enheten är inte ansluten, USB-felsökning avstängd eller en laddningskabel Återanslut med en datakabel, aktivera USB-felsökning och bekräfta sedan att handenheten visas i ADB-enhetslistan.
Enhet listad som obehörig RSA-fingeravtrycksfrågan accepterades aldrig på handenheten Lås upp skärmen, anslut igen och tryck på Tillåt USB-felsökning
uiautomatorviewer.bat saknas Det föråldrade SDK-verktygspaketet är inte installerat Använd en befintlig SDK-installation som fortfarande innehåller den, eller byt till Appium Inspector
Hierarkin är tom eller så misslyckas inspelningen Skärmen ändrades under dumpningen, eller så blockerar appen skärmdumpen Håll skärmen stilla och ta en ny ögonblicksbild; säkra skärmar kan inte tas
WebView-innehåll visas som en enda nod Läsaren läser endast inbyggda vyer Granska webbinnehåll med webbläsarutvecklingsverktyg eller en inspektör som stöder webbkontext

UIAutomatorViewer vs. Appium Inspektör vs. Layoutinspektör

Tre inspektörer används vanligtvis mot Android skärmar, och de löser lite olika problem.

Kriterium UIAutomatorViewer Appium Inspector Android Studio Layoutinspektör
Skickas med Arvet Android SDK-verktygspaket En fristående skrivbordsapplikation Android Studio
Plattformar inspekterade Android endast Android och iOS Android endast
Behöver en fungerande server Nej, den kommunicerar direkt med adb Ja, den ansluter till en Appium serversession Nej, den är kopplad till en felsökningsbar process
Genererar lokaliseringskod Nej, värdena kopieras för hand Ja, den föreslår positionerare och kan registrera handlingar Nej, det är en felsökningsvy
Passar bäst till En snabb attributsökning på en äldre installation Bygga och validera lokaliseringsverktyg för en svit Diagnostisera layout- och renderingsproblem

För en svit som redan går igenom Appium, är Inspector den naturliga efterföljaren: den läser samma attribut, kör samma UiAutomator2-drivrutin under och fungerar även mot iOS. Appium Inspektörsprojekt släpps aktivt, så det är det säkrare valet för nytt arbete, medan Layout Inspector förblir användbar när frågan är varför en vy renderas konstigt snarare än hur man ska åtgärda det. Om du fortfarande väljer en stack, den bredare jämförelsen i vår guide till testverktyg för mobilappar är ett bra nästa steg, och exempel på mobila testfall visa vad dessa lokaliseringsenheter så småningom matar in.

Vanliga frågor

Endast delvis. Visaren läser den ursprungliga vyhierarkin, så en WebView visas vanligtvis som en ogenomskinlig nod. Inspektera HTML-koden inuti den med webbläsarutvecklingsverktyg eller använd en inspektör som kan växla till webbkontexten.

Nej. Verktyget är bundet till Android Felsökningsbryggan och Android visa hierarki. För iOS-skärmar, använd Appium Inspector or Xcodes tillgänglighetsinspektör, som istället läser XCUITest-elementträdet.

Kommandot skriver samma hierarki till en XML-fil på enheten, utan grafik. Det är användbart i skript och på headless-maskiner, men du förlorar skärmdumpsöverlagringen som gör att du snabbt hittar rätt nod.

Maskininlärningsbaserade lokaliseringsmotorer poängsätter flera attribut tillsammans – text, klass, position och angränsande noder – och löser upp elementet på nytt när ett av dem ändras. Detta självläkande beteende minskar fel som orsakas av ett omdöpt id.

Ja. Klistra in attributvärdena i en kommentar så kommer Copilot vanligtvis att utarbeta det matchande sidobjektfältet och klicka på metoden. Verifiera alltid den genererade sökaren mot liveskärmen, eftersom förslaget är en gissning, inte en sökning.

Nej. Visningsprogrammet arbetar mot den installerade versionen på enheten, så en APK som du inte kompilerade kan fortfarande inspekteras. Endast attribut som utvecklaren faktiskt angav, såsom resurs-id och innehållsbeskrivning, kommer att fyllas i.

Ja. En emulator verkar adb:a precis som en fysisk handenhet, så knappen Enhetsskärmdump fångar den på samma sätt. Emulatorer är praktiska för tidig skriptning, även om slutkörningar hör hemma på riktig hårdvara.

Det ger varje kontroll ett stabilt, språkoberoende referensnummer som fungerar både som tillgänglighets-ID i ett skript och som den etikett som en skärmläsare meddelar. Testtillförlitlighet och tillgänglighet förbättras med samma ändring på en enda rad.

Sammanfatta detta inlägg med: