2013-06-07 27 views
5

Mam aplikację dla systemu Android, która korzysta z uiautomator, aby kliknąć opcje w widoku listy. ListView wygląda następująco:Android uiautomator do kliknięcia ListView

enter image description here

Próbuję kliknij Pełna Benchmark element listy, ale mój kod nie uznają elementu listy. Oto, co mam:

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(); 

Byłbym wdzięczny za każdą pomoc!

Odpowiedz

7

Oto co mogę użyć do znalezienia, a następnie kliknij element w ListView:

//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."); 
} 

Więc w twoim przypadku byłoby

clickListViewItem("Full Benchmark") 

Lub:

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

Czy istnieje sposób przewijania i znajdowania elementu na liście na podstawie tekstu początkowego. Ponieważ ten kod wymaga dokładnej nazwy przedmiotu. W wielu sytuacjach jako "Język i dane wejściowe" mają różny tekst na różnych urządzeniach. Jak poradzić sobie z tą sytuacją. –

+0

U można uzyskać wyszukiwanie String z zasobów przy pomocy @Rule dla obsługi różnych języków –

0

Istnieją dwa widok tekstowy wewnątrz zagnieżdżonego ViewGroup najprawdopodobniej LinearLayout. Wydaje się, że brakuje w kryteriach wyboru.

2

Istnieją dwa podejścia do powyższej rzeczy.

Podejście 1:

  1. Analizować UI, a następnie uzyskać wystąpienie widoku listy powiedzieć widok listy zawierającej tekst jest 3rd ListView
  2. utworzyć obiekt Uicollection jak UiCollection dummyList = new UiCollection(new UiSelector().className("android.widget.ListView").index(3));
  3. Tworzenie obiekt dla testu Benchmark UiObject dummyBenchmark = dummyList.getChildByText("Full Benchmark");

Podejście 2:

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