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的各種奇怪問題,在後面作者將分享自己的構思給大家,客觀不要着急,先休息休息一下。

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