appium自动化的一个实例

实现appium的自动化,三步走,具体如下:

第一步:启动appium的服务端:

可以通过命令行的方式启动:cmd,然后输入appium,如下图

也可以打开桌面程序appium,点击右上角的运行按钮,如下图:

第二步,写自动化脚步,我这里用eclipse写的,使用appium的java客户端,如下图:

报错是因为我没有加载相应的包,加载一下就可以了,如下图红圈里面的这些包。(记得把Junit4或者是Testng也加载一下)

我先来说一下我的这个代码,我采用了MVC框架的思想,分为业务层(M),视图层(V),数据层(c)。

其中calculator.java文件,放的就是业务层的代码,在这里,我只关心业务层面,除非业务发生变化,否则我都无需修改写好的脚本。

po_android.java文件,我放的是页面元素,页面元素可以通过E:ADTsdk ools下的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中的运行按钮,就可以看到手机开始进行自动化测试了。

原文地址:https://www.cnblogs.com/afangxin/p/6379248.html