appium自動化的一個實例


實現appium的自動化,三步走,具體如下:

第一步:啟動appium的服務端:

可以通過命令行的方式啟動:cmd,然后輸入appium,如下圖

也可以打開桌面程序appium,點擊右上角的運行按鈕,如下圖:

 

 

第二步,寫自動化腳步,我這里用eclipse寫的,使用appium的java客戶端,如下圖:

報錯是因為我沒有加載相應的包,加載一下就可以了,如下圖紅圈里面的這些包。(記得把Junit4或者是Testng也加載一下)

 

我先來說一下我的這個代碼,我采用了MVC框架的思想,分為業務層(M),視圖層(V),數據層(c)。

其中calculator.java文件,放的就是業務層的代碼,在這里,我只關心業務層面,除非業務發生變化,否則我都無需修改寫好的腳本。

po_android.java文件,我放的是頁面元素,頁面元素可以通過E:\ADT\sdk\tools下的uiautomatorviewer.bat程序獲取。

還有一個數據層,當你需要進行數據的參數化時,就需要用到了,比如用10個不同的用戶和密碼進行不斷的登錄和退出。我這里沒有創建數據層,如果需要,建一個data.java即可。

還有就是app目錄,把需要執行的apk包放到這里即可。

 

顯附上我的代碼:

calculator.java

  1 package com;
  2 /*問題匯總
  3  * 1.觸摸和多點觸摸
  4  * 2.等待元素出現時間
  5  * 3.多端口多手機進行自動測試
  6  * 4.參數化
  7  * 5.異常情況不退出程序,繼續執行到完
  8  * 
  9  * */
 10 import java.io.File;
 11 import java.net.URL;
 12 import java.util.List;
 13 
 14 import org.junit.AfterClass;
 15 import org.junit.Assert;
 16 import org.junit.BeforeClass;
 17 import org.junit.Test;
 18 import org.openqa.selenium.By;
 19 import org.openqa.selenium.WebElement;
 20 import org.openqa.selenium.remote.DesiredCapabilities;
 21 
 22 import io.appium.java_client.AppiumDriver;
 23 import io.appium.java_client.TouchAction;
 24 import io.appium.java_client.android.AndroidDriver;
 25 import page_object.android.po_android;
 26 
 27 import static org.junit.Assert.*;
 28 
 29 public class calculator {
 30       private static AppiumDriver<WebElement> driver;
 31       private po_android po = new po_android();
 32       @BeforeClass
 33         public static void setUp() throws Exception {
 34         File classpathRoot = new File(System.getProperty("user.dir"));
 35         File appDir = new File(classpathRoot, "/app");
 36             File app = new File(appDir, "mywork.apk");
 37             DesiredCapabilities capabilities = new DesiredCapabilities();
 38             capabilities.setCapability("deviceName","Android Emulator");
 39             capabilities.setCapability("platformVersion", "5.0");
 40             capabilities.setCapability("app", app.getAbsolutePath());
 41 //            capabilities.setCapability("appPackage", "org.solovyev.android.calculator");
 42 //            capabilities.setCapability("appActivity", ".CalculatorActivity");
 43             capabilities.setCapability("appPackage", "com.witdoing.mywork");
 44             capabilities.setCapability("appActivity", ".view.welcome.WelcomeActivity");
 45             capabilities.setCapability("unicodeKeyboard", "True");
 46             capabilities.setCapability("resetKeyboard", "True");
 47             
 48             driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 49             Thread.sleep(5000);
 50         }
 51       
 52       @AfterClass
 53       public static void tearDown() throws Exception {
 54         driver.quit();
 55         }
 56   
 57       //登錄
 58       @Test
 59         public void apiDemo01() throws Exception{
 60           Thread.sleep(5000);
 61           driver.findElementById(po.logid).clear();
 62           driver.findElementById(po.logid).sendKeys("15850506429");
 63         
 64           driver.findElementById(po.passwd).clear();
 65           driver.findElementById(po.passwd).sendKeys("654321");
 66           
 67           driver.findElementById(po.login).click();
 68                   
 69         }
 70 
 71       //訂單
 72       @Test
 73         public void apiDemo02() throws Exception{
 74           
 75           driver.findElement(By.id(po.order_layout)).click();
 76           driver.findElementById(po.iv_title_back).click();
 77 
 78           
 79       }
 80       
 81       //我做ing
 82       @Test
 83         public void apiDemo03() throws Exception{
 84           
 85           driver.findElementById(po.work_layout).click();
 86           driver.findElement(By.id(po.iv_title_back)).click();
 87           
 88       }
 89   
 90       //設置-關於我做
 91       @Test
 92         public void apiDemo04() throws Exception{
 93           
 94           driver.findElementById("com.witdoing.mywork:id/setting_tv").click();
 95           driver.findElement(By.id("com.witdoing.mywork:id/about_tv")).click();
 96           Assert.assertEquals("關於我做",driver.findElementById("com.witdoing.mywork:id/tv_title_text").getText());
 97           Assert.assertEquals("版本 1.0.5", driver.findElementById("com.witdoing.mywork:id/version_tv").getText());
 98           List<WebElement> els = driver.findElementsByClassName("android.widget.TextView");
 99           assertEquals("官方微信: witdoing", els.get(4).getText());  
100           driver.findElementById(po.iv_title_back).click();
101       }
102       
103     //設置-昵稱
104       @Test
105         public void apiDemo05() throws Exception{
106           driver.findElementById("com.witdoing.mywork:id/nick_tv").click();
107           driver.findElement(By.id("com.witdoing.mywork:id/nick_edit")).click();
108           driver.findElement(By.id("com.witdoing.mywork:id/nick_edit")).sendKeys("我的名字叫什么2");
109           driver.findElementById("com.witdoing.mywork:id/save_btn").click();
110           driver.findElementById("com.witdoing.mywork:id/dialog_confirm_btn").click();
111           driver.findElementById(po.iv_title_back).click();
112           Assert.assertEquals("我的名字叫什么",driver.findElementById("com.witdoing.mywork:id/nick_tv").getText());
113           driver.findElementById(po.iv_title_back).click();
114       }
115           
116     //設置-寶庫
117       @Test
118         public void apiDemo06() throws Exception{
119           driver.findElementById("com.witdoing.mywork:id/treasury_layout").click();
120           List<WebElement> els = driver.findElementsById("com.witdoing.mywork:id/title_tv");
121           Assert.assertEquals("寶庫新分享了一篇文章[自動化測試問題匯總V3]。", els.get(1).getText());
122           els.get(1).click();
123           
124           WebElement el = driver.findElementById("com.witdoing.mywork:id/content_img");
125           TouchAction action = new TouchAction(driver);
126           action.longPress(el).moveTo(100, 120);
127         
128           
129           Thread.sleep(5000);
130           driver.findElementById(po.iv_title_back).click();
131           driver.findElementById(po.iv_title_back).click();
132 
133       }
134       
135       
136 }
View Code

 

po_android.java

 1 package page_object.android;
 2 
 3 import org.openqa.selenium.WebElement;
 4 import org.openqa.selenium.support.FindBy;
 5 
 6 public class po_android {
 7 
 8     public String logid = "com.witdoing.mywork:id/user_edit" ;
 9     public String passwd = "com.witdoing.mywork:id/pwd_edit" ;
10     public String login = "com.witdoing.mywork:id/login_btn" ;
11     public String order_layout = "com.witdoing.mywork:id/order_layout" ;
12     public String iv_title_back = "com.witdoing.mywork:id/iv_title_back" ;
13     public String work_layout = "com.witdoing.mywork:id/work_layout" ;
14     
15     
16     @FindBy(id="com.witdoing.mywork:id/tv_title_text")
17     public WebElement wzid;
18 
19 }
View Code

 

第三步:

手機插入電腦,先安裝一下手機驅動(如果自行安裝失敗的話,可以通過驅動人生進行安裝)。

然后打開命令行cmd,輸入adb查看手機設備是否已經被識別到。

如果識別到了,這時執行eclipse中的運行按鈕,就可以看到手機開始進行自動化測試了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM