簡體   English   中英

Appium-本機Android應用程序-滾動(Java)

[英]Appium - Native Android Application - Scrolling (Java)

我正在嘗試使用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();
}

執行此命令后,我的測試將失敗。

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

在該屏幕上,我有一個下拉菜單,我想在其中找到並選擇特定的國家。 為此,我應該滾動(滑動)下拉菜單-直到在屏幕上看到我的國家(我想從列表中選擇)。

但是,不幸的是,這里有問題;(

但是我收到一個錯誤,我無法使用提供的策略找到元素,並且如果沒有任何滾動操作來找到該元素,我的測試就會失敗。

有任何想法嗎? 我應該改變什么? 謝謝。

嘗試滾動到所需的元素:

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

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

如果我們要檢查元素是否在頁面上可用,則必須使用findElements,然后使用其大小。 如下所示

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

如果size不等於零,則表示它在頁面上可用,我們可以檢查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);

這適用於肯定的情況,如果您也想處理否定的情況(下拉菜單中不提供的給定選項),則根據需要更新代碼

讓我知道它是否有效或您遇到任何問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM