2017-10-16 28 views
0

我有一個android中的滾動視圖內的元素列表。我需要將所有元素名稱添加到ArrayList中。我嘗試過很多種滾動方式,而且沒有一種能滿足我的要求。請幫我實現這一點。如何使用Appium Java將android滾動視圖中的web元素名添加到ArrayList中?

這是元素列表的類名:android.support.v7.widget.RecyclerView 這是各元素的id:com.testapp.poker:id/recyclerViewCards

List <String> elementNameList = new ArrayList(); 

    public void getWebElementsNameList(String classNameOfElementList, String elementId){ 
      System.out.println("Items found:"); 
      Gauge.writeMessage("Items found:"); 
      int i = 1; 
      for(WebElement element : getWebElements(classNameOfElementList, elementId)) { 
       System.out.println(i + ") " + element.getText()); 
       Gauge.writeMessage(i + ") " + element.getText()); 
       elementNameList.add(element.getText()); 
       i++; 
      } 
     } 

上面的代碼將只抓住這些都對當前視圖中可見的元素。我需要一些幫助來修改滾動邏輯。

+0

你真正需要的所有元素是列表或者你希望做點別的?也許點擊其中之一? –

回答

1

這是預期的行爲。 UIAutomator可以返回可見的元​​素。與硒不同,appium(UiAutomator)無法看到屏幕上不可見的元素。

解決您的問題是: 獲取可見元素並將它們添加到數組列表,然後滾動到下一個元素並添加到數組列表,直到列表結束。

0

你可以嘗試這樣的事情

List <String> elementNameList = new ArrayList(); 

public void getWebElementsNameList(String classNameOfElementList, String elementId){ 
    nameStart = ""; 
    System.out.println("Items found:"); 
    Gauge.writeMessage("Items found:"); 
    int i = 1; 
    while(true){  
     for(WebElement element : getWebElements(classNameOfElementList, elementId)) { 
      System.out.println(i + ") " + element.getText()); 
      Gauge.writeMessage(i + ") " + element.getText()); 
      elementNameList.add(element.getText()); 
      i++; 
     } 
     if (!keepSwipping()) { 
     break; 
     } 
    } 
} 

private static String nameStart = ""; 

private boolean keepSwipping() { 
    if (isElementPresent(By.xpath(FIRST_ELEMENT_XPATH)) && isElementPresent(By.xpath(LAST_ELEMENT_XPATH))) { 
     AndroidElement firstElement = (AndroidElement) driver.findElementByXPath(FIRST_ELEMENT_XPATH); 
     AndroidElement lastElement= (AndroidElement) driver.findElementByXPath(LAST_ELEMENT_XPATH); 
     if (nameStart.equals(firstElement.getText())) { 
      return false; 
     } else { 
      nameStart = firstElement.getText(); 
      swipe(lastElement.getLocation().x, lastElement.getLocation().y, firstElement.getLocation().x, 
        firstElement.getLocation().y, 2000); 
     } 
     return true; 
    } 
    return false; 
} 
相關問題