本文将带你了解Android应用开发AS+Appium+Java+Win自动化测试之Appium的Java测试脚本封装(Android测试),希望本文对大家学Android有所帮助。

一、为什么需要封装?

封装的本意就是为了方便、简洁。

二、Android的显式等待封装

1.   AndroidDriverWait.java

package com.example.base;

/**

* Created by LITP on 2016/9/8.

*/

import org.openqa.selenium.NotFoundException;

import org.openqa.selenium.TimeoutException;

import org.openqa.selenium.WebDriver;

import   org.openqa.selenium.WebDriverException;

import org.openqa.selenium.remote.RemoteWebDriver;

import org.openqa.selenium.support.ui.Clock;

import org.openqa.selenium.support.ui.FluentWait;

import org.openqa.selenium.support.ui.Sleeper;

import org.openqa.selenium.support.ui.SystemClock;

import java.util.concurrent.TimeUnit;

import io.appium.java_client.android.AndroidDriver;

public class AndroidDriverWait extends FluentWait {

public final static long DEFAULT_SLEEP_TIMEOUT = 500;

private final WebDriver driver;

public AndroidDriverWait(AndroidDriver   driver, long timeOutInSeconds) {

this(driver, new SystemClock(), Sleeper.SYSTEM_SLEEPER, timeOutInSeconds,   DEFAULT_SLEEP_TIMEOUT);

}

public AndroidDriverWait(AndroidDriver driver, long timeOutInSeconds, long sleepInMillis)   {

this(driver, new SystemClock(), Sleeper.SYSTEM_SLEEPER, timeOutInSeconds,   sleepInMillis);

}

public AndroidDriverWait(AndroidDriver driver, Clock clock, Sleeper   sleeper, long timeOutInSeconds,

long sleepTimeOut)   {

super(driver, clock, sleeper);

withTimeout(timeOutInSeconds,   TimeUnit.SECONDS);

pollingEvery(sleepTimeOut,   TimeUnit.MILLISECONDS);

ignoring(NotFoundException.class);

this.driver = driver;

}

@Override

protected RuntimeException timeoutException(String message, Throwable   lastException) {

TimeoutException ex = new TimeoutException(message,   lastException);

ex.addInfo(WebDriverException.DRIVER_INFO,   driver.getClass().getName());

if (driver instanceof RemoteWebDriver) {

RemoteWebDriver remote = (RemoteWebDriver)   driver;

if   (remote.getSessionId() !=   null)   {

ex.addInfo(WebDriverException.SESSION_ID,   remote.getSessionId().toString());

}

if (remote.getCapabilities()   != null)   {

ex.addInfo("Capabilities", remote.getCapabilities().toString());

}

}

throw ex;

}

}

2.ExpectedCondition.java

接口

package   com.example.base;

import com.google.common.base.Function;

import io.appium.java_client.android.AndroidDriver;

/**

* Created by LITP on 2016/9/8.

*/

public interface ExpectedCondition extends Function   {}

3.   使用

/**

* 显示等待,等待Id对应的控件出现time秒,一出现马上返回,time秒不出现也返回

*/

public AndroidElement waitAuto(By by, int time) {

try {

return new AndroidDriverWait(driver,   time)

.until(new ExpectedCondition() {

@Override

public AndroidElement apply(AndroidDriver androidDriver)   {

return   (AndroidElement)   androidDriver.findElements(by);

}

});

} catch (TimeoutException e) {

Assert.fail("查找元素超时!! " + time + " 秒之后还没找到元素 [" + by.toString() + "]", e);

return null;

}

}

三、Assert断言的封装

封装了   出现错误输出了异常信息但不终止程序的运行,会继续往下执行。

1.Assertion.java

package com.example.base;

import org.testng.Assert;

import java.util.ArrayList;

import java.util.List;

/**

* Created by LITP on   2016/9/21.

*/

public class Assertion {

public static boolean flag = true;   //是否有错误

public static List errors = new ArrayList<>(); //错误集合

/**

* 验证值是否相等

* @param actual 第一个值

* @param expected 要对比的值

*/

public static void verifyEquals(Object actual, Object expected){

try{

Assert.assertEquals(actual,   expected);

}catch(Error e){

errors.add(e);

flag = false;

}

}

/**

* 验证值是否相等

* @param actual 第一个值

* @param expected 要对比的值

* @param message 出错时候的提示消息

*/

public static void verifyEquals(Object actual, Object expected, String   message){

try{

Assert.assertEquals(actual,   expected, message);

}catch(Error e){

errors.add(e);

flag = false;

}

}

}

2.AssertionListener.java

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

java appium_Android应用开发之AS+Appium+Java+Win自动化测试之Appium的Java测试脚本封装(Android测试)...相关推荐

  1. Java游戏服务器开发之A星算法

    Java游戏服务器开发之A星算法    学习这个主要是用于寻路算法.    参考资料主要是siki学院的视频,A计划--人工智能--A星算法. 网址http://www.sikiedu.com/cou ...

  2. unity android屏幕自适应,Android应用开发之unity打开移动摄像头,并自适应屏幕显示摄像头数据。兼容android和ios...

    本文将带你了解Android应用开发之unity打开移动摄像头,并自适应屏幕显示摄像头数据.兼容android和ios,希望本文对大家学Android有所帮助. 跨平台并自适应显示摄像头数据新建工程并 ...

  3. Appium+Python安卓自动化测试之启动APP和配置获取

    Appium+Python安卓自动化测试之启动APP和配置获取 本文章未讲述appium+python环境部署,环境部署会新开文章 一.手机连接电脑 1.USB连接电脑和手机,手机上点确认连接(最好用 ...

  4. java 写jsp_Java开发之JSP指令

    一.page指令 page指令是最常用的指令,用来说明JSP页面的属性等.JSP指令的多个属性可以写在一个page指令里,也可以写在多个指令里.但需要注意的是,无论在哪个page指令里的属性,任何pa ...

  5. 自动化测试之Appium

    文章目录 问题归整 1. [华为手机如何打开开发者权限](https://jingyan.baidu.com/article/49ad8bce96e1955835d8fa57.html) 2. 报错, ...

  6. |app自动化测试之Appium问题分析及定位

    Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol ...

  7. 干货|app自动化测试之Appium 原理 与 JsonWP 协议分析

    想要使用 Appium 进行测试,那么就一定要先了解Appium的原理.Appium 不仅能够实现移动端的 JSONWP,并且延伸到了 Selenium 的 JSONWP,它能够控制不同移动设备的行为 ...

  8. 干货|app自动化测试之Appium 源码修改定制分析

    Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol ...

  9. app自动化测试之Appium问题分析及定位

    使用 Appium 进行测试时,会产生大量日志,一旦运行过程中遇到报错,可以通过 Appium 服务端的日志以及客户端的日志分析排查问题. Appium Server日志-开启服务 通过命令行的方式启 ...

最新文章

  1. Linux之Redis的启动、使用和停止
  2. LightOJ 1205 Palindromic Numbers
  3. linux sort
  4. OpenGL 期末考试作业
  5. 百度更新算法之后我想说
  6. 学习 Linux/C/C++ 必备资料
  7. 3-34Pytorch与nn库
  8. 转:开启nginx的gzip压缩的相关参数设置
  9. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第2节 maven的安装和仓库种类_04maven的安装...
  10. STM32矩阵键盘的实现原理
  11. 韦根(Wiegand协议)
  12. 【JavaSE基础 】Eclipse教程
  13. win7系统如何添加环境变量
  14. CSR8311/CSR8811 HCI vendor command说明
  15. java笔记--多敲代码四
  16. 使用 PyGame 显示图像的四种方案
  17. 选择灰盒安全测试工具,看准以下几点
  18. jsoup爬取网站信息之《冰与火之歌》
  19. C++读取音频文件mp3、flac的曲名、歌手、专辑等ID3v2标签(使用libzplay)
  20. Thinkphp开发视频打赏平台源码

热门文章

  1. qt QMessageBox 中文乱码的问题
  2. 深入kubernetes之Pod——一pod多容器
  3. ural 1353. Milliard Vasya's Function
  4. Oracle 9i DBA Fundamentals I学习笔记(六)
  5. 第0章 前言(续1)
  6. linux乌班图中文输入法,Ubuntu Linux怎么安装中文输入法
  7. 怎么看笔记本电脑的配置参数_电脑参数怎么看?教你看懂电脑各种配置
  8. 电脑计算机和算盘童话作文,消失的算盘作文
  9. JVM初学之类的加载过程
  10. 06构造方法和文件读取