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.
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.
