Appium-本机Android应用程序-滚动(Java)

Appium-本机Android应用程序-滚动(Java),java,android,appium,Java,Android,Appium,我正在尝试使用Appium在Android上进行自动测试。 这是我的密码 public class TestAndroidRealDevice { private static AndroidDriver wd; Dimension size; @Before public void setUp() throws Exception { DesiredCapabilities capabilities = new DesiredCapabilities(); capab

我正在尝试使用Appium在Android上进行自动测试。 这是我的密码

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();
}
在这个屏幕上,我有一个下拉菜单,我想在这里找到并选择特定的国家。为此,我应该滚动(滑动)下拉菜单-直到我的国家(我想从列表中选择)在屏幕上可见

但是,不幸的是,这里出了问题;(

但我得到一个错误,我无法使用提供的策略找到一个元素,并且我的测试失败,没有任何滚动操作来找到这个元素

有什么想法吗?我应该改变什么?
Thx.

尝试滚动到所需元素:

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

如果元素不可见,则显示的将引发异常

若我们想检查元素在页面上是否可用,我们必须使用findElements,然后是它的大小。如下所示

driver.findElements(byVal).size() != 0 
若大小不等于零,则表示它在页面上可用,我们可以 检查isDisplayed以了解该元素的可见性

因此,试着在(inti=0;i)的
位置编写如下代码
driver.findElements(byVal).size() != 0 
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);