Я хочу знать общий метод для прокрутки и нажатия на каждый элемент меню - PullRequest
0 голосов
/ 09 октября 2018

enter image description here

Я хочу прокрутить меню этого и других связанных приложений, а также нажать на них.Так что любезно расскажите метод, который может работать на всех приложениях в Appium Java

. Это мой код, который нажимает кнопку меню всех приложений, но не прокручивает и не нажимает:

package project;
import java.util.Scanner;
import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.FileReader;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.touch.TouchActions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.PressesKeyCode;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidKeyCode;

public class firstpro {
    static AppiumDriver<MobileElement> driver = null;

    public static void main(String[] args) {

    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setCapability("deviceName", "Samsung Galaxy");
    caps.setCapability("udid", "HFTUN678");
    caps.setCapability("platformName", "Android");
    caps.setCapability("platformVersion", "7.0");
    caps.setCapability("appPackage", "com.olx.pk");
    caps.setCapability("appActivity", 
    "pl.tablica2.activities.ProxyActivity");


        try {
            driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"), caps);
        } catch (MalformedURLException e) {
            System.out.println(e.getMessage());
        } 
        menus();
    }

    public static void menus() {
       WebDriverWait wait = new WebDriverWait(driver, 10000);
       WebElement Element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("android.view.ViewGroup")));
       driver.findElement(By.className("android.widget.ImageButton")).click();
    }
}

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете попробовать этот код, я не уверен, насколько он точен, поскольку я до сих пор не знаю полных структур дерева узлов, но он должен дать вам хорошее представление о некоторых подходах, которые вы можете использовать:

public static void menus() {
    List<WebElement> scrollViews = driver.findElements(By.className("android.widget.ScrollView"));
    Iterator<WebElement> it = scrollViews.iterator();
    while(it.hasNext()) {
        WebElement scrollView = it.next();
        // make sure this scroll view has the child element "Home"
        List<WebElement> homeElements = scrollView.findElements(By.xpath("*[text() = 'Home' or text() = 'home']"));
        if(homeElements.isEmpty()) {
            // filter out scroll views that don't have a child with the text "Home"
            it.remove();
        } else if (homeElements.size() > 1) {
            // this scroll view has multiple children with the text "Home"
        }
    }

    if(scrollViews.isEmpty()) {
        // TODO error, couldn't find any scroll view containing a child with the text "Home"
    } else if (scrollViews.size() > 1) {
        // TODO error, there are multiple scroll views containing children with the text "Home"
    }

    // the only scroll view that has a child with text "Home"
    // likely the main menu scroll view
    WebElement targetMenuScrollView = scrollViews.get(0);

    // get all the ImageButtons in the menu
    List<WebElement> menuButtons = targetMenuScrollView
            .findElements(By.className("android.widget.ImageButton"));

    // click all the buttons
    for (WebElement button : menuButtons) {
        button.click();
    }
}
...