您的位置:首页 > 编程语言 > Java开发

appium自动化测试入门(java版)

2019-02-28 20:01 190 查看

1、简述

appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。

  • “移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。

  • “移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。

  • “混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。

重要的是,appium是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS和Android测试套件间代码的复用性。

2、appium与Selenium区别

  1. appium类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。(相互关系)
  2. appium客户端类库实现了Mobile JSON Wire Protocol(一个标准协议的官方扩展草稿)和W3C WebDriver spec(一个传输不可预知的自动化协议,该协议定义了MultiAction 接口)的元素。(内部实现)
  3. appium服务端定义了官方协议的扩展,为appium 用户提供了方便的接口来执行各种设备动作,例如在测试过程中安装/卸载App。这就是为什么我们需要appium特定的客户端,而不是通用的Selenium 客户端。当然,appium 客户端类库只是增加了一些功能,而实际上这些功能就是简单的扩展了Selenium 客户端,所以他们仍然可以用来运行通用的Selenium会话。(不同点)

3、特点

  1. appium是跨平台的,可以用在多平台上,如:OSX,Windows以及Linux桌面系统上运行。
  2. appium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及Selenium(WebDriver)如何做到支持多语言的原因;
  3. appium扩展了WebDriver的协议,没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的Selenium(WebDriver)各种语言的binding都可以拿来就用,省去了为每种语言开发一个client的工作量;
  4. 支持多语言。

语言/框架 Github地址
Ruby https://github.com/appium/ruby_lib
Python https://github.com/appium/python-client
Java https://github.com/appium/java-client
JavaScript (Node.js) https://github.com/admc/wd
Objective C https://github.com/appium/selenium-objective-c
PHP https://github.com/appium/php-client
C# (.NET) https://github.com/appium/appium-dotnet-driver
RobotFramework https://github.com/jollychang/robotframework-appiumlibrary

4、appium工作原理

appium是如何工作的。

 

  • 首先,appium支持多语言,因为它针对流的几种语言分别开发的相应的appium库。好处就是我们可以选择自己熟悉的语言编写appium脚本。
  • 其次,appium支持多平台,包括MAC和Windows。它针对这两大平台开发了appium-Server。
  • 最后,appium又同时支持Android 和 iOS两个操作系统。

这就使得appium变得非常灵活。

  • 当我在MAC平台上,通过Python(python-client )编写了一个appium自动化脚本并执行,请求会首先到 appium.dum (MAC下的appium-Server),appium-Server通过解析,驱动iOS设备来执行appium自动化脚本。
  • 或者,我在Windows平台上,通过Java( java-client )编写了一个appium自动化脚本并执行,请求会首先到 appiumForWindow.zip(Window下的appium-Server),appium-Server通过解析,驱动Android虚拟机或真机来执行appium脚本。

所以,你会看到appium的强大之处就在于此。

5、需要安装什么?

这才是你最关心的问题,使用appium都需要安装些什么?其实,从appium工作原理你就应该知道需要装什么了。

  • 编程语言:Python ,Java 
  • appium client 请参考 支持多平台、多语言 的列表,根据你选择的语言来选择对应的 appium-client。
  • appium Server 即nodejs安装命令行或下载安装包安装可视化Server服务。
  • 测试运行环境,即:你需要一个Android模拟器,或 一个 Android 手机,或 一台 iPhone 手机。
[code]import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidKeyCode;

public class App {

public static void main(String[] args) throws MalformedURLException {

AndroidDriver driver = null;
DesiredCapabilities des = new DesiredCapabilities();
//    des.setCapability("automationName", "Appium");//Selendroid //自动化的模式选择
//     des.setCapability("app", "C:\\software\\CalcTest.apk");//配置待测试的apk的路径
//      des.setCapability("browserName", "chrome");  //h5
des.setCapability("platformName", "Android");//平台名称
des.setCapability("platformVersion", "4.4");//手机操作系统版本
des.setCapability("udid", "127.0.0.1:62025");//连接的物理设备的唯一设备标识
des.setCapability("deviceName", "S4");//使用的手机类型或模拟器类型  UDID
//com.tianqi2345/com.tianqi2345.homepage.ChooseCityActivity
des.setCapability("appPackage", "com.tianqi2345");//App安装后的包名,注意与原来的CalcTest.apk不一样
des.setCapability("appActivity", "com.tianqi2345.homepage.ChooseCityActivity");//app测试人员常常要获取activity,进行相关测试,后续会讲到

des.setCapability("unicodeKeyboard", "True");//支持中文输入
des.setCapability("resetKeyboard", "True");//支持中文输入
des.setCapability("newCommandTimeout", "60");//没有新命令时的超时时间设置
des.setCapability("nosign", "True");//跳过检查和对应用进行 debug 签名的步骤

driver = new AndroidDriver(new URL("http://192.168.0.251:34000/wd/hub"), des);//虚拟机默认地址
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//设置超时等待时间,默认9500ms
WebElement findElement = driver.findElement(By.id("com.tianqi2345:id/search_edit_text"));
findElement.click();
findElement.sendKeys("广州");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("=============测试============");
if (driver != null) {
driver.closeApp();
}
}
}

 

pom.xml

[code]<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.ling</groupId>
<artifactId>appium</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>appium</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>6.1.0</version>
</dependency>
<!-- <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-firefox-driver</artifactId>
<version>3.141.0</version
20000
> </dependency> -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: