背景

  公司产品的业务已经发展到了移动端,开发选型已经结束,决定使用phonegap做移动端的web应用开发平台。考虑到业务的复杂与多样,移动端的测试同样需要自动化。在网上看了很多,最终锁定了3个移动端测试工具:Selendroid,Appium,Robotium。之所以选择他们3个,是因为团队已经有了以Selenium为基础的测试框架,而这三个工具与Selenium可以说一脉相承。

目标

  基于phonegap的混合型app(hybrid app)web应用移动端自动化测试

选型过程

Selendroid(放弃)

放弃Selendroid的原因是在按照官网教程操作后,运行测试时,报错,拿着报错在网上查询,结果都没有解决。资料少的可怜,后来看到Appium中集成了Selendroid后,果断放弃。

Robotium(放弃)

其实Robotium在尝试的过程中是最顺利的一个,功能也强大。

但其只支持Android设备,而且其以Android Test工程测试的方式很难集成到公司团队已有的框架中,所以也放弃了。

但是仍然会关注其发展,社区活跃,功能够精深有很多可以借鉴的地方。在Appium的研究过程中也起了很大的作用。

Appium(选中)

Appium支持ios和android设备,支持hybrid app,集成了Selendroid,易于集成到公司现有框架中,社区正在形成,文档资料也在丰富中。

在尝试的过程中虽有曲折,但最后也顺利实现了。

混合型app以Appium搭建自动化测试开发环境

Appium

官方网址:http://appium.io/

中文社区:http://testerhome.com/

下载地址(由testerhome社区提供):http://pan.baidu.com/s/1jGvAISu#dir

1. 下载最新版本AppiumServer 1.2.0,解压后,进入目录下找到Appium.exe,运行即可,此程序作为Appnium与被测设备之间通讯的服务端

出现如下界面说明启动成功

2. 将真机连接到PC端

3. 我使用Eclipse作为开发IDE,建立一个maven工程appium-demo,在pom中引用了公司框架中的Selenium核心工程,这样可以省去添加Selenium依赖的过程

,同时在maven的中央库中找到Appium包,并引用

Appium的maven引用

GroupId:io.appium

ArtifactId:java-client

Version:1.5.0

4. 建立工程后,就可以写测试代码了,在工程中建立一个Junit Test类Test1.java,代码如下:

package com.example.hello;

import io.appium.java_client.AppiumDriver;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Set; import junit.framework.TestCase; import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities; @RunWith(BlockJUnit4ClassRunner.class)
public class Test1 extends TestCase { private AppiumDriver driver; @Before
public void start() throws MalformedURLException {
// 使用phonegap打包的hybrid app路径
String apppath = "D:\\Work\\codes\\hands\\hands-hello-phonegap\\platforms\\android\\bin\\HelloWorld.apk"; // 初始化AppniumDriver
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "NX403A");// 真机测试android设备
capabilities.setCapability("platformVersion", "4.2.2");// 真机android版本为4.2.2
capabilities.setCapability("platformName", "Android");// 真机为android系统
capabilities.setCapability("app", apppath);// 被测app apk包的位置
capabilities.setCapability("appPackage", "com.example.hello");// 被测app的Activity类所在包
capabilities.setCapability("appActivity", ".HelloWorld");// 被测app的Activity类
capabilities.setCapability("automationName", "selendroid");// 因为真机为4.2版本,所以使用selendroid
// http://127.0.0.1:4723/wd/hub地址就是AppiumServer的地址
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
} @Test
public void main() {
try {
Set<String> contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
System.out.println(contextName); // 用于返回被测app是NATIVE_APP还是WEBVIEW,如果两者都有就是混合型App
} Thread.sleep(5000);// 等它一会 driver.context("WEBVIEW_0");// 让appium切换到webview模式以便查找web元素
WebElement text_baidusearch = driver.findElement(By.id("word"));
text_baidusearch.click();// 点击百度的搜索输入框(web元素) /*
* appium不支持中文输入 参考了robotium的以js方式为元素直接设置value的做法
* 利用Selenium中Webdriver执行js方法实现中文输入
*/
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.getElementById('word').value='输入法'"); Thread.sleep(10000);// 等一会观察下效果
} catch (InterruptedException e) {
e.printStackTrace();
}
} @After
public void stop() {
driver.quit();
} }

工程结构如下

5. 保持被测设备为解锁状态,虽然Appium有一个unlock的功能,但有时不起作用,所以最好还是将锁屏关闭。运行Test1.java,得到如下结果

移动端混合型App(hybrid app)自动化测试选型与实践的更多相关文章

  1. Hybrid App—Hybrid App开发模式介绍和各种开发模式对比

    什么是Hybrid App 最开的App开发只有原生开发这个概念,但自从H5广泛流行后,一种效率更高的开发模式Hybrid应运而生,它就是"Hybrid模式".Hybrid APP ...

  2. Native App, Hybrid App, Web App对比

    Native App,Hybrid App和Web App简介 目前基本所有的移动互联网app可以分为三类:Native App,Hybrid App和Web App. Native App是基于智能 ...

  3. Hybrid App(一)App开发选型

    1.几种app开发模式概述 Native App 即传统的原生APP开发模式,Android基于Java语言,底层调用Google的 API;iOS基于OC或者Swift语言,底层调用App官方提供的 ...

  4. Android Hybrid App自动化测试实战讲解(基于python)

    1.Hybrid App自动化测试概要 什么是Hybrid App? Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App ...

  5. 移动开发 Native APP、Hybrid APP和Web APP介绍

    高速区分定义: Native App 以基于智能手机本地操作系统如IOS.Android.WP并使用原生程式(SDK)编写执行的须要用户安装使用的第三方应用程序; Web APP 以HTML+JS+C ...

  6. Jquery API Hybrid APP调研

    http://jquery.cuishifeng.cn/source.html   hybrid app Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间 ...

  7. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  8. Hybrid APP基础篇(二)->Native、Hybrid、React Native、Web App方案的分析比较

    说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid Ap ...

  9. 优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码

    Recorder H5 GitHub开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化,以支持更多实用的功能. 另外IOS的Hybrid App也完成 ...

随机推荐

  1. sqlserver自定义函数【粘】

     用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回 用户自定义函数的类型: 标量函数:返回一个标量值 表格值函数{内联表格值函数.多表格值函数}:返回行集(即返回多个值) 1. ...

  2. Delphi与Qt在Windows下使用共享内存进程间通信

    Delphi部分 type  TGuardInfo=record    Lock: Integer;  end;  PGuardInfo = ^TGuardInfo; TGuardShareMem=c ...

  3. JQuery 知识点

    1:animate 动画效果 $(function () { $(".sidebar-nav a").mouseover(function () { $(this).animate ...

  4. having——至少被订购过两回的订单

    此篇介绍having的用法 一.表:订单表,产品表 说明:订单表order ,包含prodectid 二.查询至少被订购过两回的订单 800x600 Normal 0 7.8 磅 0 2 false ...

  5. hdu 4712

    看了大牛的解法  第一次知道可以产生随机数解题   在计算hamming距离时用了位运算  很简便 /************************************************* ...

  6. 电商安全无小事,如何有效地抵御 CSRF 攻击?

    现在,我们绝大多数人都会在网上购物买东西.但是很多人都不清楚的是,很多电商网站会存在安全漏洞.比如乌云就通报过,国内很多家公司的网站都存在 CSRF 漏洞.如果某个网站存在这种安全漏洞的话,那么我们在 ...

  7. eclipse进行开发

    最近在用eclipse进行开发的时候遇到了一个很奇怪的问题,其实这个问题很早以前就遇到了只是苦于一直没有需找到答案.直到今天又遇到了,才觉得这真是个很实用很使用的功能,所以分享给大家,希望对大家有帮助 ...

  8. AD15高版软件卡不卡,问题解决大讨论

    AD高版软件很卡(包括13 14 15版),这是我遇到过的问题,大家都遇到过的问题, 这里我分享一个解决办法:也请给位有什么好的方法也一起分享. 问题1卡:打开AD15软件, 按住鼠标中键 放大 或 ...

  9. 编程之美 3.1 字符串移位包含问 复杂度(O(N*K)

    分享关于编程之美3.1自己编写的代码,很简单. s2.沿着s1匹配(循环匹配,利用%Length技巧),匹配上,返回true. //BOP3.1 char src[] = "AABBCD&q ...

  10. bugumongo--ConnectToMongoDB

    连接MongoDB 在能够对MongDB进行操作之前,需要使用BuguConnection连接到MongoDB数据库.代码如下: BuguConnection conn = BuguConnectio ...