APPIUM+JAVA实现对安卓APK的自动化测试----第十三篇【JUNIT框架】

好吧~终于要讲框架了,首先我们先来个懒汉的方法,就是借用JUNIT框架来实现运行,作者用下来发现JUNIT对APPIUM的支持并不十分友善,但是用来教学到时很合适,来吧,作者开始气定神闲+豪火球了。

import io.appium.java_client.android.AndroidDriver;

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

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

import com.ciic.mywheel.stdoutput.StdOutput;
import com.ciic.mywheel.waituntil.WaitUntilFindElementById;
import com.ciic.mywheel.waituntil.WaitUntilFindElementByName;

public class TestCase_One {

    public static AndroidDriver<?> driver;
    // 配置内容
    private static String apkName = "weixin.apk";
    private static String platformVersion = "4.4.2";
    private static String serverURL = "http://127.0.0.1:4723/wd/hub";
    
    //before 就是用例开始前的准备工作==========================================
         @Before
        public void setUp() throws Exception {
             
            File classpathRoot = new File(System.getProperty("user.dir"));
            File appDir = new File(classpathRoot, "apps");
            File app = new File(appDir, apkName);

            new DesiredCapabilities();
            DesiredCapabilities capabilities = DesiredCapabilities.android();
            
            capabilities.setCapability("unicodeKeyboard", "True");
            capabilities.setCapability("resetKeyboard", "True");
            
            capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
            capabilities.setCapability("platformName", "Android");
            capabilities.setCapability("deviceName", "Android Emulator");
            capabilities.setCapability("platformVersion", platformVersion);
            capabilities.setCapability("app", app.getAbsolutePath());
            //核心关键步骤
            driver = new AndroidDriver<WebElement>(new URL(serverURL),
                    capabilities);
            // LOG记录
            StdOutput.print("【Appium驱动】初始化成功");

        }

        //test就是用例的主题部分=================================================
        @Test
        public void testSubstract() {
            try {
                
            WaitUntilFindElementByName waitUnitlByName = new WaitUntilFindElementByName();
            // 登录界面
            waitUnitlByName.waitUntilInit(driver, "登录", 30);
            
                waitUnitlByName.waitUntilLoading();
            

            driver.findElement(By.name("登录")).click();
            // 使用其他登录方式
            waitUnitlByName.waitUntilInit(driver, "使用其他方式登录", 30);
            waitUnitlByName.waitUntilLoading();

            driver.findElement(By.name("使用其他方式登录")).click();
            // QQ号登录
            waitUnitlByName.waitUntilInit(driver, "QQ号/微信号/Email", 30);
            waitUnitlByName.waitUntilLoading();

            driver.findElementByName("QQ号/微信号/Email").sendKeys("353732443");
            Thread.sleep(1000);

            driver.findElementByXPath( "//android.widget.LinearLayout[@resource-id='com.tencent.mm:id/alr']/android.widget.EditText") .sendKeys("kfjghfjruhghdd");
            Thread.sleep(1000);

            driver.findElementByName("登录").click();
            // WAITUNTIL对象
            WaitUntilFindElementById waitUnitlById = new WaitUntilFindElementById( driver, "com.tencent.mm:id/bmm", 30);
            waitUnitlById.waitUntilLoading();

            driver.findElementById("com.tencent.mm:id/bmm").click();
            //=========================================================
            // 进入微信
            Thread.sleep(10000);
            //=========================================================
            
            driver.swipe(800, 900, 100, 900, 2000);
            Thread.sleep(2000);

            driver.findElementByName("公众号").click();
            Thread.sleep(2000);

            driver.tap(1, 865, 1216, 500);
            Thread.sleep(2000);

            driver.findElementByName("微信测试号").click();
            // 进入微信公众号项目首页
            // WAITUNTIL对象
            waitUnitlByName.waitUntilInit(driver, "测试之路", 30);
            waitUnitlByName.waitUntilLoading();

            driver.findElementByName("测试之路").click();
        
            } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
        }

    //after为用例的结束收尾工作==========================================
        @After
        public void tearDown() throws Exception {
            
            driver.quit();
            
        }
        
}


写好这样的用例之后,右击运行选择【JUNIT测试】运行就可以了。有几条就写几条。

不过作者在使用JUNIT4的时候发现,JUNIT4对APPIUM的支持不是很好,驱动有时候老是启动不起来,而且JUNIT4对排序做的并不十分友善,如果不使用SUIT容器来排序,JUINT4是无序运行的,但是用了SUIT容器则一个用例失败后,后续的用例就都全部失败了,在这里作者也老实交代,对JUNIT4了解的也不多,如果有大神可以解惑的,也请教导一下小弟。

以上代码作者已经对部分appium的函数做了封装,所以大家只要看个格式和思路就可以了,由于JUNIT4的各种奇怪问题,在后面作者将分享自己的构思给大家,客观不要着急,先休息休息一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章