首页 > 解决方案 > 滚动到不在屏幕上且具有共享对象 ID 但具有唯一用户确定文本的元素(Android / Java)

问题描述

我正在尝试导航到与其他对象共享相同 ID 但具有不同文本的元素(并单击)。其中一些元素,取决于其他变量,可能会或可能不会出现在屏幕上。在我的设备上,滚动有效,但在某些设备或模拟器上,它并不总是有效。请建议我临时滚动的替代方法,因为我有点不知道该怎么做。

我正在使用 2018 年 7 月 11 日构建的 IntelliJ IDEA Community 2018.1 Build #IC-181.5540.7

JRE:1.8.0_152-release-1136-b39 amd64

JVM OpenJDK 64 位服务器虚拟机

public static void environment(AndroidDriver driver, String environmentName, String configStatus, String deviceType, String configName) {
    List elementsFilterPage = driver.findElements(By.id("com.digiflare.videa:id/filter_item_text"));
    System.out.println("There is this much Environment config file elements = " + elementsFilterPage.size()); // THIS IS TO SELECT THE ENVIRONMENT OF THE CONFIG FILE. MAKE SURE TO CHANGE THE "Staging" TO SUIT YOUR NEEDS
    for (int i = 0; i < elementsFilterPage.size(); i++) {
        MobileElement element = (MobileElement) elementsFilterPage.get(i);
        if (element.getText().equals(environmentName)) {
            element.click();
            break;
        }
        TouchAction ta = new TouchAction(driver);   // ONLY NEEDED TO BE ABLE TO ACCESS THE OTHER ELEMENTS FILTER PAGE. MIGHT NEED TO EDIT IF YOU HAVE LOTS OF ELEMENTS ON PAGE TO ACCESS BRANDS, STATUS, ETC
        ta.press(point(962, 1329))
                .moveTo(point(962, 345))
                .waitAction(waitOptions(Duration.ofMillis(3000)))
                .release()
                .perform();
    }

    System.out.println("There is this much Status config file elements = " + elementsFilterPage.size());  // THIS IS TO SELECT THE STATUS OF THE CONFIG FILE MAKE SURE TO CHANGE THE "Published" TO SUIT YOUR NEEDS
    for (int i = 0; i < elementsFilterPage.size(); i++) {
        MobileElement element = (MobileElement) elementsFilterPage.get(i);
        if (element.getText().equals(configStatus))    {
            element.click();
            break;
        }

    }

    System.out.println("There is this much Phone config file elements = " + elementsFilterPage.size());  // THIS IS TO SELECT THE DEVICE TYPE OF THE CONFIG FILE EDIT VARIABLE TO SUIT YOUR NEEDS
    for (int i = 0; i < elementsFilterPage.size(); i++) {
        MobileElement element = (MobileElement) elementsFilterPage.get(i);
        if (element.getText().equals(deviceType)) {
            element.click();
            break;
        }
    }
    WebElement doneButton = driver.findElementById("com.digiflare.videa:id/edition_done_menu_item");
    doneButton.click();

    Utils.waitForPresence(driver, 6, "com.digiflare.videa:id/edition_name");
    List elementsConfigFilesPage = driver.findElements(By.id("com.digiflare.videa:id/edition_name"));
    System.out.println("There is this much Config Files elements = " + elementsConfigFilesPage.size());
    for (int i = 0; i < elementsConfigFilesPage.size(); i++) {
        MobileElement element = (MobileElement) elementsConfigFilesPage.get(i);

        if (element.getText().equals(configName))  { // THIS IS WHERE YOU'LL BE ABLE TO ENTER THE LATEST PUBLISHED / TO BE TESTED CONFIG FILE. EDIT VARIABLE TO SUIT YOUR NEEDS
            element.click();
            break;
        }
    }
}

标签: javaandroidscrollnavigation

解决方案


因此,经过我自己的一些搜索,我找到了以下解决方案。我创建了一个方法,它会滚动屏幕直到找到指定的文本并单击它。这是为那些可能与我遇到相同问题的人准备的:

public static void scrollclickText (AndroidDriver driver, String visibleText){

    driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+visibleText+"\").instance(0))").click();

推荐阅读