Appium Pożądane możliwości dla Android Emulator

⚡ Inteligentne podsumowanie

Pożądane możliwości to pary klucz-wartość Appium klient wysyła przy otwieraniu sesji informację, na jakiej platformie, urządzeniu, sterowniku i aplikacji powinien zostać uruchomiony automatyczny test.

  • ???? Sesja contract: Możliwości są przekazywane w treści JSON żądania nowej sesji i nie można ich później zmienić.
  • Android niezbędniki: appPackage i appActivity nadają nazwę aplikacji i ekranowi Appium powinien się uruchomić.
  • Warianty oczekiwania: appWaitPackage i appWaitActivity obejmują ekrany powitalne, które pojawiają się przed rzeczywistym punktem wejścia.
  • 🧪 Appium 2 prefiks: Każda niestandardowa funkcjonalność wymaga teraz prefiksu appium: vendor, w przeciwnym razie serwer ją odrzuci.
  • 🛠️. Nowoczesne technologie Java klient: DesiredCapabilities ustąpiło miejsca UiAutomator2Options i XCUITestOptions w ramach Selenium 4.
  • 📊 Znajdowanie wartości: Zapytanie adb dumpsys lub klasa PackageManager ujawnia nazwy pakietów i aktywności.

Appium pożądane możliwości par klucz-wartość dla Android sesja emulatora

Jakie są pożądane możliwości

„Pożądane możliwości” pomagają nam modyfikować zachowanie serwera podczas automatyzacji. Appium jest to mapa skrótów lub para klucz-wartość używana do wysyłania poleceń do Appium serwer, na którym każde polecenie klienta jest wykonywane w kontekście sesji.

Na przykład klient wysyła żądanie POST/session zawierające obiekt JSON do Appium serwer.

Zatem do wysłania żądania lub utrzymania sesji z serwerem używany jest zestaw par klucz-wartość. Jest to znane jako „pożądane możliwości”.

import io.appium.java_client.AppiumDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
{
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName","Android Emulator");
        capabilities.setCapability("platformVersion", "4.4");
}

Ważna rola pożądanej zdolności

  • „DesiredCapabilities” pomagają użytkownikowi kontrolować żądanie sesji z serwerem. Na przykład dla sesji iOS ustawiamy platformName możliwości = iOS, a dla Android nazwa_platformy_sesyjnej = Android.
  • „DesiredCapabilities” służą na przykład do skonfigurowania instancji WebDriver FirefoxSterownik, ChromeDriver lub InternetExplorerDriver.
  • DesiredCapability jest bardzo przydatny dla Selenium Siatka. Na przykład, służy do uruchamiania różnych przypadków testowych w innej przeglądarce i innym systemie operacyjnym. Na podstawie podanej funkcjonalności, hub siatki wskazuje na odpowiedni węzeł. Węzły są definiowane za pomocą metod właściwości „set”:
    DesiredCapabilities obj = new DesiredCapabilities(); 
    obj.setBrowserName("firefox"); 
    obj.setVersion("18.0.1"); 
    obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);					
    
  • Pożądana funkcjonalność to pakiet zdefiniowany w bibliotece. Przed użyciem „DesiredCapabilities” należy go zaimportować z poniższej biblioteki.
    Org.openqa.selenium.remote.DesiredCapabilities

Appium obsługuje oba Android i iOS, więc istnieje osobny zestaw Appium możliwości serwera dla każdej platformy.

Poniższa tabela przedstawia niektóre powszechnie używane Android możliwości i wartości do wykorzystania.

Możliwości OPIS Wartości/zastosowania
pakiet aplikacji Zadzwoń do pożądanego Java pakiet w Android że użytkownik chce uruchomić

Wartość= com.example.mojaaplikacja/

Obiekt.setCapability(“appPackage”, “com.whatsapp”);

Aktywność aplikacji Aktywność aplikacji, którą użytkownik chce uruchomić z pakietu.

Wartość = MainActivity, .Settings

Obiekt.setCapability(“appActivity”, “com.whatsapp.Main”);

pakiet appWait Pakiet, na który aplikacja musi czekać Wartość=com.example.android.myapp
aktywność appWait Każdy Android aktywność, na którą użytkownik musi czekać

Wartość = SplashActivity

możliwości.setCapability(“appWaitActivity”, “com.example.game.SplashActivity”)

UWAGA: zapoznaj się z Appium dokumentacja aby zobaczyć więcej Android możliwości.

Poniższa tabela przedstawia niektóre powszechnie używane funkcje systemu iOS i wartości, których należy użyć.

Możliwości OPIS Wartości
Limit czasu uruchomienia Całkowity czas (w ms) oczekiwania na oprzyrządowanie. 2000
ZROBIŁEŚ Aby zidentyfikować unikalny numer urządzenia podłączonego urządzenia fizycznego 166aestu4

UWAGA: zapoznaj się z Appium przewodnik po możliwościach aby zobaczyć więcej funkcji iOS.

Jak zmieniły się pożądane możliwości Appium 2

Powyższe przykłady pochodzą z Appium 1 ery i nadal pokazują kształt zestawu możliwości, ale zmieniły się dwie zasady i obie uniemożliwią rozpoczęcie nowoczesnej sesji.

Po pierwsze, specyfikacja W3C WebDriver definiuje tylko niewielki zestaw standardowych możliwości, z których platformName oraz browserName Tutaj nie ma to znaczenia. Każda inna funkcja jest rozszerzeniem dostawcy i musi mieć prefiks przestrzeni nazw zakończony dwukropkiem. AppiumPrefiks to appium:. Tak deviceName staje się appium:deviceName oraz platformVersion staje się appium:platformVersion. Appium 2 również wymaga appium:automationNameponieważ sterowniki są instalowane osobno, a nie są dołączone do serwera.

Po drugie, powtarzanie prefiksu staje się żmudne, więc Appium przyjmuje jedynkę appium:options zdolność, której wartością jest obiekt. Zdolności wewnątrz tego obiektu nie wymagają prefiksu, a jeśli nazwa pojawia się zarówno wewnątrz, jak i na zewnątrz obiektu, wygrywa wartość wewnętrzna.

{
    "platformName": "iOS",
    "appium:options": {
        "automationName": "XCUITest",
        "platformVersion": "16.0",
        "app": "/path/to/your.app",
        "deviceName": "iPhone 12",
        "noReset": true
    }
}

⚠️ Uwaga dotycząca wersji: na Java bok, Selenium 4 i Appium Java klient 8 wycofał DesiredCapabilities klasa pokazana wcześniej. Kompilatory specyficzne dla sterownika odziedziczone z BaseOptions zastąpić to — UiAutomator2Options dla Android oraz XCUITestOptions dla systemu iOS — z mapą jeden do jednegoping z każdego starego setCapability Zadzwoń. Oryginalny kod powyżej jest tutaj zachowany jako przykład historyczny.

ExtracInformacje o pakietach i zajęciach

Pakiety to pliki lub klasy w pakiecie. Nadają uporządkowaną strukturę programowaniu modułowemu. JavaRóżne pakiety są przechowywane w jednym pliku JAR, który użytkownik może wywołać w celu pełnego wykonania. Podobna koncepcja jest stosowana w tworzeniu aplikacji mobilnych.

W Android system operacyjny, wszystkie aplikacje są instalowane w formie Java pakiety. Tak więc, do extracinformacje o ścieżce pakietu, Android Używana jest klasa PackageManager.

Pobiera informacje o pakietach i aktywnościach dla aplikacji zainstalowanych na urządzeniu zarówno wstępnie, jak i po instalacji.

Możesz uzyskać instancję klasy PackageManager, wywołując metodę getPackageManager(). Ta metoda umożliwia dostęp do pakietów i powiązanych uprawnień zainstalowanych aplikacji oraz manipulowanie nimi.

Na przykład:

PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)

Jak znaleźć pakiet aplikacji i aktywność aplikacji za pomocą adb

Powyższa ścieżka PackageManager działa z poziomu aplikacji. Jako tester zazwyczaj masz tylko zainstalowaną kompilację, więc szybszą ścieżką jest zapytanie adb do podłączonego urządzenia lub emulatora.

Otwórz aplikację na urządzeniu ręcznie, a następnie uruchom jedno z poniższych poleceń w terminalu w folderze platform-tools. Polecenie wyświetla okno, które jest aktualnie aktywne, a wartość jest formatowana jako package/activity.

adb shell dumpsys window | find "mCurrentFocus"
adb shell dumpsys window windows | grep -i "mCurrentFocus"

Użyj pierwszej formy w Windows wiersza poleceń, a drugi w powłoce Unix lub Git Bash. Odczytaj wynik jako dwie połówki: wszystko przed ukośnikiem to wartość appPackage, a wszystko po nim jest wartością appActivity.

Obowiązują dwa ostrzeżenia. Aktywność, na której skupia się uwaga, to to, co w danym momencie znajduje się na ekranie, co nie zawsze jest aktywnością, od której uruchamiana jest aplikacja — jeśli sesja zakończy się niepowodzeniem podczas inicjalizacji sterownika, należy ponownie uruchomić aplikację i ponownie odczytać wartość. A jeśli najpierw pojawi się ekran powitalny, aktywność wejściowa będzie różnić się od tej, do której ostatecznie chcesz uzyskać dostęp, co jest dokładnie tym przypadkiem. appWaitActivity istnieje dla.

Alternatywą wizualną jest przeglądarka uiautomatorviewer, który przechwytuje bieżącą hierarchię ekranu i pokazuje pakiet oraz klasę każdego węzła.

Typowe błędy pożądanych możliwości i jak je naprawić

Większość nie powiodła się Appium Sesje kończą się przed uruchomieniem choćby jednego kroku testu, a przyczyna prawie zawsze leży w zestawie możliwości, a nie w teście. Poniższa tabela mapuje każdą wiadomość do jej standardowej poprawki.

Treść wiadomości Prawdopodobna przyczyna Fix
Nieprawidłowa lub nieobsługiwana funkcja WebDriver Niestandardowa funkcja została wysłana bez prefiksu dostawcy Dodaj do niego appium: lub przenieś go do appium:options
Pożądane możliwości muszą zawierać albo nazwę automatyzacji, albo nazwę platformy Appium 2 nie może wybrać kierowcy Ustaw jawnie platformName i appium:automationName
Nie można uruchomić aplikacji. Oryginalny błąd: aktywność użyta do uruchomienia aplikacji nie istnieje. appActivity nie pasuje do manifestu Ponownie odczytaj wartość za pomocą polecenia dumpsys powyżej
Sesja nie rozpoczęła się: nie znaleziono urządzeń Nie podłączono emulatora ani telefonu komórkowego Przed uruchomieniem potwierdź urządzenie za pomocą urządzenia adb
Po upływie limitu czasu nie można utworzyć nowej sesji Ekran powitalny opóźnia aktywność wejściową Ustaw appWaitActivity i podnieś appWaitDuration
Stan aplikacji nie jest resetowany pomiędzy uruchomieniami Domyślne zachowanie resetowania zostało zastąpione Revzobacz appium:noReset i appium:fullReset dla wybranego uruchomienia

Jeśli sesja nie chce się rozpocząć, przeczytaj Appium dziennik serwera, a nie stos klienta trace. Serwer podaje, której funkcjonalności nie udało się spełnić, a w tym wierszu podano rozwiązanie problemu.

FAQ

Nie. Nazwa platformy i nazwa przeglądarki są standardowymi parametrami W3C i pozostają bez prefiksu. Każda inna Appium ability, w tym deviceName i platformVersion, jest rozszerzeniem dostawcy i wymaga prefiksu appium:.

Narzędzia uczenia maszynowego w chmurach urządzeń sugerują zestaw możliwości z urządzenia docelowego i kompilacji oraz sygnalizują wartości, które nie zostały zrealizowane w podobnych sesjach. Traktuj dane wyjściowe jako wersję roboczą i potwierdź każdą nazwę w dokumentacji sterownika.

Copilot wykonuje typowe bloki możliwości, ale został przeszkolony w zakresie wielu Appium 1 kod i często pomija prefiks lub sugeruje przestarzałą klasę DesiredCapabilities. Sprawdź każdą sugestię pod kątem zgodności z aktualnym przewodnikiem.

appPackage nadaje nazwę pakietowi Appium uruchamia. appWaitPackage nadaje nazwę pakietowi Appium czeka na pojawienie się, zanim przekaże kontrolę, co ma znaczenie, gdy program uruchamiający lub ekran powitalny najpierw ładuje inny pakiet.

platformName ustawiono na iOS, a appium:automationName na XCUITest. Sterownik XCUITest wymaga również co najmniej jednego z następujących parametrów: appium:app, appium:bundleId lub browserName, w przeciwnym razie otwiera sesję na ekranie głównym.

Liczba sekund, przez które serwer czeka na wysłanie przez klienta kolejnego polecenia. Jeśli czas oczekiwania zostanie przekroczony, serwer zakłada, że ​​klient odszedł i zamyka sesję, co często wygląda na losową awarię.

Funkcja noReset pomija standardowy reset, dzięki czemu dane aplikacji przetrwają sesję. Funkcja fullReset dodaje dodatkowe kroki, takie jak odinstalowywanie i ponowna instalacja, dla maksymalnej powtarzalności. Obie opcje mają domyślnie wartość false i nie powinny być włączane jednocześnie.

Nie. Możliwości to parametry rozpoczynające sesję, które są ustalane po jej utworzeniu. Jeśli sterownik zezwala na zmianę zachowania w trakcie sesji, udostępnia ustawienie za pośrednictwem interfejsu API ustawień.

Podsumuj ten post następująco: