2017-04-08 26 views
0

我試圖使用Appium在Android上進行自動化測試。 這是我的代碼。Appium - 原生Android應用程序 - 滾動(Java)

public class TestAndroidRealDevice { 

private static AndroidDriver wd; 
Dimension size; 


@Before 
public void setUp() throws Exception { 

    DesiredCapabilities capabilities = new DesiredCapabilities(); 

    capabilities.setCapability(MobileCapabilityType.APPIUM_VERSION, "1.6.4-beta.2"); 
    capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); 
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "6.0.1"); 
    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Samsung Galaxy S6"); 
    capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium"); 
    capabilities.setCapability(MobileCapabilityType.FULL_RESET, true); 
    capabilities.setCapability(MobileCapabilityType.APP, "/Users/app-t3st-release.apk"); 

    wd = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities); 
    wd.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    Thread.sleep(3000); 

} 

@Test 
public void loginTest() throws Exception { 

    WebElement login = wd.findElement(By.id("proceedBtn")); 
    login.click(); 
    wd.findElement(By.id("customerBigBtn")).click(); 
    wd.findElement(By.id("haveAPassAlreadyBtn")).click(); 
    wd.findElement(By.id("countrySpinnerContainer")).click(); 

    for (int i=0; i<4; i++) 
    { 
     Thread.sleep(2000); 

     if (wd.findElement(By.xpath("//android.widget.ListView[contains(text(), 'Poland (+48)')]")).isDisplayed()) { 
      wd.findElement(By.xpath("//android.widget.ListView[contains(text(), 'Poland (+48)')]")).click(); 
      break; 
     } 
     else 
     { 
      do { 
       horizontalScroll(); 

      } while (wd.findElement(By.xpath("//android.widget.ListView[contains(text(), 'Poland (+48)')]")).isDisplayed()); 
     } 
    } 

} 

public void horizontalScroll() 
{ 
    WebElement el = wd.findElementByClassName("android.widget.ListView"); 
    el.getSize(); 
    int x_start=(int)(size.width*0.60); 
    int x_end=(int)(size.width*0.30); 
    int y=130; 
    wd.swipe(x_start,y,x_end,y,4000); 
} 

@After 
public void tearDown() throws Exception { 
    wd.quit(); 
} 

在此之後命令我的測試失敗:

wd.findElement(By.id("customerBigBtn")).click(); 
wd.findElement(By.id("haveAPassAlreadyBtn")).click(); 
wd.findElement(By.id("countrySpinnerContainer")).click();enter code here 

在該屏幕我有下拉菜單,在這裏我想找到並選擇具體的國家。爲此,我應該滾動(滑動)下拉菜單 - 直到我的國家(我想從列表中選擇)在屏幕上可見。

但不幸的是出了什麼錯在這裏;(

,但我得到的是使用提供的策略,我無法找到一個元素的錯誤,我的測試失敗,沒有任何滾動動作來找到這個元素

所有。 ?的想法,我應該改變 THX

回答

0

嘗試滾動到所需的元素:?

MobileElement listItem = list 
      .findElement(MobileBy 
        .AndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView(" 
        + "new UiSelector().text(\"listItem text\"));")); 
0

如果元素不可見,顯示將拋出異常。

如果我們想要檢查元素是否在頁面上可用,我們必須使用findElements,然後使用它的大小。如下圖所示

driver.findElements(byVal).size() != 0 

如果大小不等於零意味着它是可用頁面上,我們可以 檢查isDisplayed它知道元素的可見性。

所以儘量在for (int i=0; i<4; i++)

do { 
    List<WebElement> allOptions = wd.findElements(By.xpath("//android.widget.ListView")); 

    for (WebElement webElement : allOptions) { 
     if (webElement.getText().contains("Poland")) { 
      webElement.click(); 
      flag = true; 
      break; 
     } 
    } 
    if (!flag) { 
     horizontalScroll(); 
    } 
} while (!flag); 

這適用於積極的情況下,如果你想處理負案 以及(給選項的地方,如下編寫代碼是不可用在下拉),然後 更新的代碼按照您的要求

讓我知道,如果它工作,或者你面對任何問題

相關問題