实现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

 package com;
/*问题汇总
* 1.触摸和多点触摸
* 2.等待元素出现时间
* 3.多端口多手机进行自动测试
* 4.参数化
* 5.异常情况不退出程序,继续执行到完
*
* */
import java.io.File;
import java.net.URL;
import java.util.List; import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities; import io.appium.java_client.AppiumDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import page_object.android.po_android; import static org.junit.Assert.*; public class calculator {
private static AppiumDriver<WebElement> driver;
private po_android po = new po_android();
@BeforeClass
public static void setUp() throws Exception {
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "/app");
File app = new File(appDir, "mywork.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("platformVersion", "5.0");
capabilities.setCapability("app", app.getAbsolutePath());
// capabilities.setCapability("appPackage", "org.solovyev.android.calculator");
// capabilities.setCapability("appActivity", ".CalculatorActivity");
capabilities.setCapability("appPackage", "com.witdoing.mywork");
capabilities.setCapability("appActivity", ".view.welcome.WelcomeActivity");
capabilities.setCapability("unicodeKeyboard", "True");
capabilities.setCapability("resetKeyboard", "True"); driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
Thread.sleep(5000);
} @AfterClass
public static void tearDown() throws Exception {
driver.quit();
} //登录
@Test
public void apiDemo01() throws Exception{
Thread.sleep(5000);
driver.findElementById(po.logid).clear();
driver.findElementById(po.logid).sendKeys("15850506429"); driver.findElementById(po.passwd).clear();
driver.findElementById(po.passwd).sendKeys("654321"); driver.findElementById(po.login).click(); } //订单
@Test
public void apiDemo02() throws Exception{ driver.findElement(By.id(po.order_layout)).click();
driver.findElementById(po.iv_title_back).click(); } //我做ing
@Test
public void apiDemo03() throws Exception{ driver.findElementById(po.work_layout).click();
driver.findElement(By.id(po.iv_title_back)).click(); } //设置-关于我做
@Test
public void apiDemo04() throws Exception{ driver.findElementById("com.witdoing.mywork:id/setting_tv").click();
driver.findElement(By.id("com.witdoing.mywork:id/about_tv")).click();
Assert.assertEquals("关于我做",driver.findElementById("com.witdoing.mywork:id/tv_title_text").getText());
Assert.assertEquals("版本 1.0.5", driver.findElementById("com.witdoing.mywork:id/version_tv").getText());
List<WebElement> els = driver.findElementsByClassName("android.widget.TextView");
assertEquals("官方微信: witdoing", els.get(4).getText());
driver.findElementById(po.iv_title_back).click();
} //设置-昵称
@Test
public void apiDemo05() throws Exception{
driver.findElementById("com.witdoing.mywork:id/nick_tv").click();
driver.findElement(By.id("com.witdoing.mywork:id/nick_edit")).click();
driver.findElement(By.id("com.witdoing.mywork:id/nick_edit")).sendKeys("我的名字叫什么2");
driver.findElementById("com.witdoing.mywork:id/save_btn").click();
driver.findElementById("com.witdoing.mywork:id/dialog_confirm_btn").click();
driver.findElementById(po.iv_title_back).click();
Assert.assertEquals("我的名字叫什么",driver.findElementById("com.witdoing.mywork:id/nick_tv").getText());
driver.findElementById(po.iv_title_back).click();
} //设置-宝库
@Test
public void apiDemo06() throws Exception{
driver.findElementById("com.witdoing.mywork:id/treasury_layout").click();
List<WebElement> els = driver.findElementsById("com.witdoing.mywork:id/title_tv");
Assert.assertEquals("宝库新分享了一篇文章[自动化测试问题汇总V3]。", els.get(1).getText());
els.get(1).click(); WebElement el = driver.findElementById("com.witdoing.mywork:id/content_img");
TouchAction action = new TouchAction(driver);
action.longPress(el).moveTo(100, 120); Thread.sleep(5000);
driver.findElementById(po.iv_title_back).click();
driver.findElementById(po.iv_title_back).click(); } }

po_android.java

 package page_object.android;

 import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy; public class po_android { public String logid = "com.witdoing.mywork:id/user_edit" ;
public String passwd = "com.witdoing.mywork:id/pwd_edit" ;
public String login = "com.witdoing.mywork:id/login_btn" ;
public String order_layout = "com.witdoing.mywork:id/order_layout" ;
public String iv_title_back = "com.witdoing.mywork:id/iv_title_back" ;
public String work_layout = "com.witdoing.mywork:id/work_layout" ; @FindBy(id="com.witdoing.mywork:id/tv_title_text")
public WebElement wzid; }

第三步:

手机插入电脑,先安装一下手机驱动(如果自行安装失败的话,可以通过驱动人生进行安装)。

然后打开命令行cmd,输入adb查看手机设备是否已经被识别到。

如果识别到了,这时执行eclipse中的运行按钮,就可以看到手机开始进行自动化测试了。

appium自动化的一个实例的更多相关文章

  1. python自动化工具之pywinauto(一个实例)结合pyuserinput

    以下是pywinauto使用指南.这个窗口句柄可以在Spy++中查看 (Microsoft Spy++(查看窗口句柄) 10.00.30319 官方最新绿色版) python自动化工具之pywinau ...

  2. appium自动化测试之UIautomatorviewer元素定位

    appium自动化测试之UIautomatorviewer元素定位 标签(空格分隔): uiautomatorviewer元素定位 前面的章节,已经总结了怎么搭建环境,怎样成功启动一个APP了,这里具 ...

  3. Appium自动化—浅谈iOS自动化测试环境搭建

    在日常的测试工作中,我们会发现有些测试工作重复率极高,测试人员需要花费大量的时间进行这些重复性的测试,浪费了大量的人力与时间.若能够将常用的测试场景进行自动化,那必定能节省许多的人力与时间.作为一个初 ...

  4. appium自动化的工作原理(1)

    用appium开发移动端自动化测试脚本这么长时间,还没有认证的了解下它的原理是什么,到底是如何实现的呢? 1.先看一个Appium加载的过程图解(来自:了解appium自动化的工作原理--https: ...

  5. Appium自动化 - 设置unicodeKeyboard: True运行脚本后,手机输入时无法调出软键盘

    问题背景 做appium自动化的时候,使用了UiAutomator1驱动,然后设置了UnicodeKeyboard 执行自动化脚本之后,玩手机的时候发现平时用的输入法键盘没法调出来了 'automat ...

  6. Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...

  7. C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper

    前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...

  8. 转 C# 只允许运行一个实例

    来源:http://blog.csdn.net/jin20000/article/details/3136791 互斥进程(程序), 简单点说,就是在系统中只能有该程序的一个实例运行. 现在很多软件都 ...

  9. C# 只启动一个实例完全解决方案

    工作上经常会遇到"程序只能启动一个实例"这样的需求. 我想,这样的需求应该很普遍,所以没打算去动脑筋,去找谷歌问下就得了,用下来发现,不是这里不爽就是那里不行. 先说下我详细的几点 ...

随机推荐

  1. Visual Studio Online,带来四种开发模式,未来已来。

    北京时间 2019 年 11 月 4 日,在 Microsoft Ignite 2019 大会上,微软正式发布了 Visual Studio Online 公开预览版! 简单来说,Visual Stu ...

  2. CentOS 7下MySQL 5.7安装

    5.7和之前版本的MySQL有一些不同,现把CentOS 7下MySQL 5.7安装.配置与应用完整过程记下来,或许对新手来说有用. 本文描述的安装是采用通用的二进制压缩包(linux – Gener ...

  3. DOS打印目录树到文件

    tree /f >>tree.txt 卷 数据 的文件夹 PATH 列表 卷序列号为 -FBAE E:. └─mysite │ manage.py │ └─mysite settings. ...

  4. windows 利用环境变量%PATH%中目录可写提权

    使用PowerUp的时候有时候会有这种结果 [*] Checking %PATH% for potentially hijackable DLL locations... Permissions : ...

  5. NOIP模拟26

    把题解沽了好久了,今天还是不想写,我们靠的B卷其实挺水的,但是我就是想吐槽一下!咋还带题目里面放题解的?题里一点题解的线索都没有,但是玄机竟然在题目里! 我也是醉了,T1就是一个贪心,题目说贪婪,T2 ...

  6. Box 黑科技 —— 支持手机端反编译 !Box 黑科技 —— 支持手机端反编译 !

    项目地址: Box 文末扫码获取最新安装包 . 前言 有将近一个月没有更新文章了,一方面在啃 AOSP ,消化起来确实比较慢.在阅读的过程中,有时候上来就会陷入源码细节,其实这是没有必要的.刚开始更多 ...

  7. 如何把链表以k个结点为一组进行翻转

    [MT笔试题] 题目描述: K 链表翻转是指把每K个相邻的结点看成一组进行翻转,如果剩余结点不足 K 个,则保持不变.假设给定链表 1 -> 2 -> 3 -> 4 -> 5 ...

  8. MQ基本应用场景

    简介 消息队列 MQ 既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积.高吞吐.可靠重试等特性. 应用场景 削峰填谷:诸如秒杀.抢红包.企业开门红等大型活动时皆 ...

  9. AngularJS: Error reports on $injector:modulerr

    Angular JS最常见的问题是,程序启动失败,error为$injector:modulerr 错误是因为加载对应的Module失败,但很难找到需要修改的Module. 一个简单的小技巧是,不要使 ...

  10. shell中tar加密打包

    tar 打包是一个很常见的操作,但是当打了一个包却又不想让别人看到里面的小秘密的时候就可以使用加密的方法进行打包. 以下是一个脚本实现的加密打包和解密的shell脚本: cat tar_passwor ...