2013-06-07 26 views
5

Ho un'app per Android che utilizza l'uiautomator per fare clic sulle opzioni in un listview. Il ListView si presenta così:android uiautomator per fare clic su ListView

enter image description here

che sto cercando di fare clic sulla voce benchmark list completa, ma il mio codice per esso non riconosce la voce di elenco. Questo è quello che ho:

UiScrollable listView = new UiScrollable(new UiSelector().scrollable(
     true).className("android.widget.ListView")); 

UiObject item1 = listView.getChildByText(new UiSelector() 
.className(android.widget.TextView.class.getName()), 
     "Full Benchmark"); 

item1.click(); 

Apprezzerei qualsiasi aiuto!

risposta

7

Ecco quello che uso per trovare, e quindi fare clic su un elemento in una lista:

//Find and click a ListView item 
public void clickListViewItem(String name) throws UiObjectNotFoundException { 
    UiScrollable listView = new UiScrollable(new UiSelector()); 
    listView.setMaxSearchSwipes(100); 
    listView.scrollTextIntoView(name); 
    listView.waitForExists(5000); 
    UiObject listViewItem = listView.getChildByText(new UiSelector() 
      .className(android.widget.TextView.class.getName()), ""+name+""); 
    listViewItem.click(); 
    System.out.println("\""+name+"\" ListView item was clicked."); 
} 

Quindi nel tuo caso sarebbe

clickListViewItem("Full Benchmark") 

Oppure:

UiScrollable listView = new UiScrollable(new UiSelector()); 
listView.setMaxSearchSwipes(100); 
listView.scrollTextIntoView(name); 
listView.waitForExists(5000); 
UiObject listViewItem = listView.getChildByText(new UiSelector() 
     .className(android.widget.TextView.class.getName()), "Full Benchmark"); 
listViewItem.click(); 
+0

C'è un modo per scorrere e trovare l'elemento nell'elenco in base al testo iniziale. Poiché questo codice richiede il nome esatto dell'articolo. in molte situazioni come "Lingua e input" hanno testo differente in dispositivi diversi. Come gestire quella situazione. –

+0

U può ottenere stringa di ricerca dalle risorse con l'aiuto di @Rule per supportare diverse lingue –

0

Ci sono due TextView in un ViewGroup nidificato molto probabilmente LinearLayout. Questo sembra mancare nei criteri di selezione.

2

Ci sono due approcci per la suddetta cosa.

Approccio 1:

  1. Analizzare UI e quindi ottenere l'istanza della vista elenco dicono testo visualizzazione elenco che contiene è il 3 ° listview
  2. creare un oggetto Uicollection come UiCollection dummyList = new UiCollection(new UiSelector().className("android.widget.ListView").index(3));
  3. Crea una oggetto per Benchmark UiObject dummyBenchmark = dummyList.getChildByText("Full Benchmark");

Metodo 2:

new UiScrollable(
    new UiSelector().scrollable(true) 
).scrollIntoView(
    new UiSelector().text("Full BenchMark") 
); 
new UiObject(
    new UiSelector().text("Full BenchMark") 
).click(); 
Problemi correlati