web-dev-qa-db-fra.com

Comment faire défiler l'écran pour cliquer sur l'élément dans Android avec Appium et Java?

Je voudrais savoir comment faire défiler pour cliquer sur l'élément dans Android en utilisant Appium et Java?

J'ai une liste d'éléments dans "Android.support.v7.widget.RecyclerView". Puisqu'il a plus de 10 éléments, nous devons faire glisser l'écran pour voir les éléments ci-dessous. Chaque élément a le même identifiant qui est "com.osanda.exampleapp/textViewTitle". Mais leurs textes sont différents comme "Apple", "Orange", "Grapes" ......

Tout ce dont j'ai besoin est de faire défiler et de cliquer sur l'élément concerné en utilisant son texte ("Apple", "Orange", "Grapes" .....)

J'ai suivi de nombreux tutoriels mais je ne pouvais pas le faire correctement. J'ai réussi à faire défiler l'écran. Mais cela ne fonctionnera pas si l'élément est au centre du parchemin.

Lorsque j'ai répertorié les noms des éléments, seuls les éléments visibles sont affichés, pas tous les éléments.

List<WebElement> elements = androidDriver.findElementByClassName("Android.support.v7.widget.RecyclerView").findElements(By.id("com.osanda.exampleapp:id/textViewTitle"));
        for(WebElement element : elements) {
            System.out.println(element.getText());
        }

Je vous remercie.

3
Osanda Deshan

Cela a fonctionné pour moi.

public void scrollAndClick(String visibleText) {
     androidDriver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+visibleText+"\").instance(0))").click();
        }
    }
5
Osanda Deshan

Veuillez utiliser le code ci-dessous. Il défilera jusqu'à ce que le texte soit visible. 

   String uiSelector = "new UiSelector().textMatches(\"" + text
                        + "\")";

   String command = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView("
                        + uiSelector + ");";

    driver.findElementByAndroidUIAutomator(command);

Maintenant, vous pouvez effectuer l'action de clic après cela.

2
bsk
public AndroidElement ScrollToElement(String by, String using) {
    AndroidElement element = null;
    int numberOfTimes = 10;
    Dimension size = driver.manage().window().getSize();
    int anchor = (int) (size.width / 2);
    // Swipe up to scroll down
    int startPoint = (int) (size.height - 10);
    int endPoint = 10;

    for (int i = 0; i < numberOfTimes; i++) {
        try {
            new TouchAction(driver)
                .longPress(point(anchor, startPoint))
                .moveTo(point(anchor, endPoint))
                .release()
                .perform();
            element = (AndroidElement) driver.findElement(by, using);
            i = numberOfTimes;
        } catch (NoSuchElementException ex) {
            System.out.println(String.format("Element not available. Scrolling (%s) times...", i + 1));
        }
    }
    return element;
}

Dans votre test, utilisez comme suit: Exemple: String usingWebView = “//Android.widget.TextView[@text=‘Spinner’]”; String by = “xpath”; MobileActions mbAct = new MobileActions(driver); //This is just a class which has above function code. AndroidElement webViewElement = mbAct.ScrollToElement(by, usingWebView, 250); webViewElement.click();

0
ShiyamTJ

findElementByAndroidUIAutomator--AndroidUiAutomater est obsolète dans la dernière version,

Où comme maintenant le code qui fonctionne ressemble à

MobileElement element = driver.findElement(MobileBy.AndroidUIAutomator(
        "new UiScrollable(new UiSelector().resourceId(\"com.Android.vending:id/tab_recycler_view\")).getChildByText("
        + "new UiSelector().className(\"Android.widget.TextView\"), \"Games We Are Playing\")"));

//Perform the action on the element
element.click();
0
lokesh sharma