2017-04-08 51 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); 

这适用于积极的情况下,如果你想处理负案 以及(给选项的地方,如下编写代码是不可用在下拉),然后 更新的代码按照您的要求

让我知道,如果它工作,或者你面对任何问题

相关问题