2015-11-26 16 views
9

Używam Appium do testowania hybrydowej aplikacji na Androida, w tym do częstego przechodzenia między kontekstem NATIVE i WEBVIEW. Te Webviews są tworzone przy użyciu React Libraries.Uzyskiwanie dostępu do elementów reakcji za pomocą Appium do automatyzacji

mojego rozeznania i poprawcie mnie jeśli się mylę, How React Works jest to, że tworzy wirtualny DOM przy użyciu prawdziwego DOM i generuje nazwę klasy dynamicznej odpowiadającej tych w javascript. Model Diff Algorithm zapewnia efektywny sposób różnicowania obiektów przy użyciu tych automatycznie generowanych nazw klas.


Problem jestem stoi to, że za pomocą Appium nie jestem w stanie uzyskać dostęp do elementów z tymi WebView wykorzystaniem dowolnej metody findElementsBy. Nazwa klasy będąca tylko parametrem widocznym dla UIAutomatora, na którym możemy naprawdę polegać, jest zmieniana przez React na każdym nowym wygenerowanym kompilacji.

  1. Czy istnieje sposób, aby można było te nazwy klas byłaby generowane automatycznie do pewnych rozsądnych nazw używając React samej biblioteki?

chrome inspect zapewnia szczegóły WebView w mojej aplikacji jako:

<div class="_32f8NoUfyUtNSxo3w4Ptbp" data-reactid=".0.1.$=13:0.0.0">…</div> 
  1. Wszelkie pomysły, w jaki sposób uzyskać dostęp do rzeczywistych elementów DOM za pomocą Appium w tej sprawie?

Info: WebView.setWebContentsDebuggingEnabled(true) jest ustawiony w kodzie aplikacji.

Byłbym wdzięczny za wszelkie uwagi tutaj.

+0

Czy używasz modułu ładującego do plecaka dla stylów lub jak je komponujesz/kompilujesz? –

+0

@DanielSchmidt: Nie mam dużego kontekstu nad końcem kompilacji widoków. Niedługo poda szczegóły. – nullpointer

Odpowiedz

3

Na podstawie tego linku: https://github.com/facebook/react-native/issues/7135

Rozwiązaniem dla tego problemu: wykorzystać zarówno dostępne i accessibleLabel na widokach

DOC na etykiecie Accessibility: https://facebook.github.io/react-native/docs/accessibility.html#accessibilitylabel-ios-android

na mojej reakcji rodzimych komponentów:

<TextInput accessible={true} accessibilityLabel={'Tap Me'}></TextInput> 

Na moim skrypcie Test:

mobileElement = find_Element(accessibilty_id, "Tap Me") 
mobileElement.send_keys "hello world" 
+0

Czy to wymaga użycia "dostępnego" i "accessiblityLabel" w kodzie widoku? Czy skrypt, który podałeś, działa z appium, ponieważ nie użyłem jeszcze żadnego takiego atrybutu jako selektora? – nullpointer

+0

Tak, mój skrypt działa z Appium, ale tylko dla komponentu, który ma atrybut accessibility. Po przeczytaniu reaktywnej dokumentacji natywnej, nie wszystkie reagujące komponenty natywne mają atrybut accessibilityLabel.wolę używać tykwa do testowania automatycznego w trybie natywnym, w tykwie można znaleźć element oparty na indeksie komponentu, tekście wewnątrz komponentu lub accessibilityLabel – RobbyWH