2013-03-26 12 views
6

Próbuję zacząć z Appium do testowania aplikacji mobilnych mojej firmy. Chcę używać skryptów Pythona do pisania skryptów i muszę zacząć od aplikacji na Androida.wyliczyć wszystkie elementy wiązań Selen Pythona do Appium

mam przykłady Appium wszystkich pracujących. Mogę uruchomić grunt android i testy działają i mogę uruchomić przykładową aplikację android.py.

Ale jestem totalną nowicjuszką i nie mam jasnego obrazu tego, jak zidentyfikować kontrolki w aplikacjach mojej firmy. Mam doświadczenie w Pythonie, więc pomyślałem, że zbuduję listę elementów kontrolnych i dokonam ich introspekcji.

Utknąłem! Wszystkie metody, takie jak driver.find_elements_by_tag_name() wymagają określonego identyfikatora (lub przynajmniej nie znalazłem żadnego symbolu wieloznacznego, który działa).

Jak mogę przeprowadzić introspekcję drzewa Appium elementów reprezentujących testowaną aplikację na Androida? Jak mogę wyliczyć wszystkie elementy, aby móc je introspekcjonować? Czy istnieje drzewo, w którym mogę chodzić, aby znaleźć wszystkie elementy w aplikacji?

Miałem nadzieję, że uda mi się wymyślić elementy bez potrzeby pobierania kodu źródłowego aplikacji, budowania aplikacji w Eclipse itp., Ale mogę to zrobić w razie potrzeby.

P.S. Wolałbym używać Pythona, ale byłbym otwarty na użycie czegoś innego do introspekcji, gdyby to działało lepiej. Wciąż mogłem pisać aktualne testy w Pythonie, chyba że inny język był w jakiś sposób znacznie lepszy.

Odpowiedz

2

Nadal chciałbym sposób na introspekcję interfejsu Selenium z Python. Ale znalazłem praktyczny sposób, aby uzyskać jasny obraz tego, jak aplikacja jest rozłożona, a potem łatwo jest wymyślić, jak napisać testy Selenium.

Najpierw uruchom aplikację na prawdziwym urządzeniu podłączonym do komputera programistycznego Android lub emulatora. Zasadniczo, jeśli uruchomisz adb devices, chcesz zobaczyć jedno urządzenie, na którym działa Twoja aplikacja. Następnie uruchom narzędzie uiautomatorviewer, a następnie kliknij ikonę paska narzędzi Device Screenshot. (Są tylko dwie ikony paska narzędzi: pierwsza to ikona Open i wygląda jak folder z plikami, a ten, który ma wyglądać jak stos telefonów komórkowych.)

Gdy to zrobisz, obraz Twojej aplikacji pojawia się, po lewej stronie zrzutu ekranu i po prawej stronie z możliwością przeglądania drzewa. Zarys pokazuje wszystkie elementy sterujące aplikacji, wraz z ich etykietami tekstowymi, jeśli istnieją, oraz inne informacje (np. Czy dla tej kontroli właściwość lub false).

Jedno ostrzeżenie: elementy sterujące są oznaczone numerami, ale w powiązaniach selenu numery mogą być różne. W aplikacji przykładowej ApiDemos przycisk Graphics ma numer indeksu 4, ponieważ jest to piąty przycisk, ale aby uzyskać do niego dostęp z powodu jego pozycji, musiałem użyć indeksu 5. Indeks 0 był nieklikalnym obiektem zawierającym tekst "Dema API", w innym obiekcie FrameLayout tworzącym nagłówek ekranu.

Tak, udało mi się dokonać tej zmiany do skryptu android.py:

#elem = driver.find_element_by_name('Graphics') 
elem = driver.find_elements_by_tag_name('TextView')[5] 

Wykomentuj rozmowy driver.find_element_by_name() i zamiast znaleźć szósty TextView w całej aplikacji. To nie najlepsza praktyka, ale pokazuje, że wyniki uiautomationviewer pozwalają mi zobaczyć rzeczy, które muszę wiedzieć o kontrolkach.

Teraz wiem, że wystarczy, aby zrobić trochę introspekcji:

for elem in driver.find_elements_by_tag_name('TextView'): 
    if elem.text == "Graphics": 
     break 
else: 
    print("Could not find desired item") 

To nie jest lepsze niż po prostu wywołanie driver.find_element_by_name() ale to pokazuje, że jestem na dobrej drodze.

uiautomatorviewer to praktyczne rozwiązanie mojego problemu. Jeśli masz czysty Python, daj mi znać.

3

Appium obsługuje metodę "strony źródła" WebDrivera. Możesz to zrobić:

# assume you have a driver object 
import json 

source = driver.page_source 
source = json.loads(source) 
# you can now work with source as a python object 
+0

Dziękuję za odpowiedź. Próbowałem już tego i nie działa to dla mnie ... sesja testowa kończy się błędem. Czy przetestowałeś go w aplikacji na iOS lub w aplikacji na Androida? Założę się, że działa poprawnie na iOS, ale nie sądzę, że jeszcze działa na Androida. – steveha

Powiązane problemy