【问题标题】:How to use testng annotions for appium automation?如何使用 testng 注解进行 appium 自动化?
【发布时间】:2018-11-06 15:44:32
【问题描述】:

说基类是:

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());

    }
}

所以现在我的问题是我如何首先在gestures.java类中摆脱main方法,以及如何在基类中使用testng注解并使用其他类的testng注解调用其他类好吗?

【问题讨论】:

    标签: testng appium


    【解决方案1】:

    您好,您可以创建一个 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());
    
        }
    }
    

    注意:如果上面的代码对你不起作用,只需尝试将 appium java-client 版本、selenium 版本更改为最新版本。由于大多数方法在当前版本中已被弃用,您可能需要更新上述代码。

    这应该让您了解如何使用 testng 注释,以及如何摆脱 java main 方法。

    TestNG 提供了更多注释,您可以在 testng 官方网站上进行探索。

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 2014-08-03
      • 2020-06-30
      • 2015-04-08
      • 2015-07-10
      • 1970-01-01
      • 2021-10-11
      • 2014-09-28
      • 2021-05-09
      相关资源
      最近更新 更多