• 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中的运行按钮,就可以看到手机开始进行自动化测试了。

  • 相关阅读:
    任何优秀的程序员, 都有早逝的风险
    租车App第一次迭代报告
    快租车app——需求分析心得
    结对编程——自动生成数学试卷的系统(javaswing,mysql)by 陈松&刘宇航
    结队编程之——阅读分析队友的代码(C++自动生成数学试卷)
    自动生成不同难度的数学试卷系统,并输出到txt文件中,命名为当前时间(java)
    代码之美——浅谈命名规则与代码优化
    关于防抖和节流
    关于sessionStorage和localstorage的一些记录
    vue应用微信二维码登录的一些记录
  • 原文地址:https://www.cnblogs.com/afangxin/p/6379248.html
Copyright © 2020-2023  润新知