Как использовать тестовые аннотации для автоматизации приложений? - PullRequest
0 голосов
/ 28 мая 2018

Скажем, базовый класс:

package tutcheck;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.MobileCapabilityType;

public class Base {

    public static void main(String[] args) throws MalformedURLException {
        // TODO Auto-generated method stub

        File f = new File("src");
        File fs=new File(f,"ApiDemos-debug.apk");

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "192.168.56.101:5555");
        cap.setCapability(MobileCapabilityType.APP,fs.getAbsolutePath());
        AndroidDriver<AndroidElement> driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"),cap);
    }
}

, а другой класс:

package tutcheck;

import java.net.MalformedURLException;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.interactions.touch.TouchActions;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;

public class Gestures extends Base {
    public static void main(String[] args) throws MalformedURLException {

        AndroidDriver < AndroidElement > driver = Capabilities();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\"Views\").instance(0))").click();
        //driver.findElementByXPath("//android.widget.TextView[@text='Expandable Lists']").click();

        TouchAction t = new TouchAction(driver);
        t.tap(driver.findElementByXPath("//android.widget.TextView[@text='Expandable Lists']")).perform();
        driver.findElementByXPath("//android.widget.TextView[@text='1. Custom Adapter']").click();

        t.press(driver.findElementByXPath("//android.widget.TextView[@text='People Names']")).waitAction(Duration.ofSeconds(10)).release().perform();
        //t.press(driver.findElementByXPath("//android.widget.TextView[@text='People Names']")).waitAction(Duration.ofSeconds(10)).release().perform();
        System.out.println(driver.findElementByXPath("//android.widget.TextView[@text='Sample menu']").getText());

    }
}

Итак, теперь мой вопрос заключается в том, как мне сначала избавиться от основного метода в жестах.Java-класс, а также как использовать аннотации testng в базовом классе и вызывать другие классы, используя аннотации testng и для других классов?

1 Ответ

0 голосов
/ 29 мая 2018

Привет, вы можете создать класс Test Base как BaseTest.java , где вы будете инициализировать AndroidDriver и тестовый класс как Test.java который расширит BaseTest.java и использует драйвер для выполнения действий драйвера.

Ниже приведен пример кода для BaseTest.java:

package com.edf.mobile.tests;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeTest;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

public class BaseTest {
    public AppiumDriver<?> driver;
    //initialize your driver here
    @BeforeTest
    public void beforeTest(){
        File f = new File("src");
        File fs=new File(f,"ApiDemos-debug.apk");

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "192.168.56.101:5555");
        cap.setCapability(MobileCapabilityType.APP,fs.getAbsolutePath());
        try {
            driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"),cap);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

И класс Test.java выглядит следующим образом:

package com.edf.mobile.tests;

import io.appium.java_client.TouchAction;
import org.testng.annotations.Test;

import java.time.Duration;
import java.util.concurrent.TimeUnit;

public class AppiumTest extends BaseTest {
    @Test
    public void test(){
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.findElementsByXPath("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\"Views\").instance(0))");
        //driver.findElementByXPath("//android.widget.TextView[@text='Expandable Lists']").click();

        TouchAction t = new TouchAction(driver);
        t.tap(driver.findElementByXPath("//android.widget.TextView[@text='Expandable Lists']")).perform();
        driver.findElementByXPath("//android.widget.TextView[@text='1. Custom Adapter']").click();

        t.press(driver.findElementByXPath("//android.widget.TextView[@text='People Names']")).waitAction(Duration.ofSeconds(10)).release().perform();
        //t.press(driver.findElementByXPath("//android.widget.TextView[@text='People Names']")).waitAction(Duration.ofSeconds(10)).release().perform();
        System.out.println(driver.findElementByXPath("//android.widget.TextView[@text='Sample menu']").getText());

    }
}

Примечание: если приведенный выше код не работает для вас, попробуйте изменить версию java-клиента appium, версию selenium на последнюю.Поскольку большинство методов в текущей версии устарели, вы можете обновить приведенный выше код.

Это должно дать вам представление о том, как использовать аннотации testng и как избавиться от основного метода java.

TestNG предоставляет множество других аннотаций, с которыми вы можете ознакомиться на официальном сайте testng.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...