Appnium移动自动化框架初探

作者:cryanimal QQ:164166060
本文简要介绍了appnium自动化框架的架构、加载流程、支持语言、相关配置,以及元素定位工具等。

官方网站:

http://appium.io

image

Appnium是由SauceLabs支持,一家业界领先的测试产品公司, 有成熟的企业测试解决方案

 

Appium支持的平台

image

  • Android上使用了instrumentation和uiautomator两套技术
  • iOS使用uiautomation
  • 同时还支持firefox, 并可扩展其他平台

 

Appium的优点

  • 跨架构,native hybrid webview
  • 跨设备,android iosfirefoxos
  • 跨语言,java python ruby nodejsphp
  • 跨app, 可以在多个app之间交互
  • 不依赖源代码
  • 不限制测试框架和平台

 

Appium在Android上的架构

image

 

Appium在iOS上的架构

image

Appium的安装

详见:http://blog.csdn.net/kaka1121/article/details/51698700

Appium的启动,上文中也有详解

通过命令:Appium–help 可以看到一些可选参数

默认开启4723端口接受webdriver请求
默认开启4724用于和android通讯

视频演示:http://v.youku.com/v_show/id_XNjM0ODIxNTUy.html

 

Appium自动化所需工具及android开发环境安装

依赖工具包括uiautomatorviewer、abd、DDMS等

详见:http://blog.csdn.net/kaka1121/article/details/51698745

 

Appium的加载流程

image

Appium支持主流语言

image

Appium webdriver的capabilities配置

Capabilities是由客户端发送给Appium服务器端的用来告诉服务器去启动哪种我们想要的会话的一套键值对集合。当中也有一些键值对是用来在自动化的过程中修改服务器端的行为方式。

必填的项目

deviceName :我无论填写什么值,在我机器上都可以跑通测试,但是这项又是必填。我用得Appium版本是V1.2.2。

app :如果填写了,appium会在目标机器上安装测试目标app,如果没有的话,会根据appActivity和appPackage去目标机器查找目标app

appPackage : 可以通过sdk自带工具aapt获得

image

appActivity:同样可以通过以上工具获得。

有一点需要注意的是,值可以附加packageName,也可以不附加。

也就是说以下两种填写方式都是对的“.NotesList"和”com.example.android.notepad.NotesList"

通用配置:

image

android only:

image

IOS ONLY

image

配置原文参见:http://blog.sina.com.cn/s/blog_700be1c00102vgha.html

java Demo示例

image

详细情况,参见我的另一篇博文

元素定位

  • Android和iOS的原生控件以及webview控件映射为特定的命名, 比如把所有平台的按钮映射为button元素
  • 把当前的结构树映射为html文档
  • 通过xpath来选择元素

三种定位方式

  • Name: id,label text
  • Tag_name: component type
  • Xpath

查看元素的属性以及xpath,使用uiautomatorview

image

元素交互

Webdriver已经支持

  • 点击
  • 输入
  • 按键事件

Mobile相关:

  • 拖动
  • 划动
  • 长按

附录:业界top框架综合对比

image

转载于:https://www.cnblogs.com/lazytest/p/5606456.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在模块化系统的结构中,模块是可组合、可分解和更换的单元,这就要求模块本身具有一定的 独立性,完整的前端模块化方案需要将js、css和模板维护在一起,保证模块的独立。规范在scrat中静态资源分成 模块化资源 和 非模块化资源 两类,其中模块化资源还分为 工程模块 和 生态模块 两类。模块化资源:具有独立性的模块所对应的静态资源。每个独立的模块将自己所需要的js、css、模板、图片等资源放在一起维护,使得模块具备独立性,引用模块的js即可。工程模块:当前工程所开发的模块。这些模块通常跟业务耦合较高。生态模块:从 模块生态 下载的模块,属于外部依赖。非模块化资源:虽然在模块化开发体系内,应该 一切皆模块,但总有不应该成为模块的资源,比如入口页面、模块化框架、页面启动器等。其目录规范为:project   ├─ component_modules (生态模块)   ├─ components        (工程模块)   ├─ views             (非模块化资源)   ├─ ...如果把所有资源都扔到 views 目录下,scrat也可以退化为传统的无模块前端项目,模块化与非模块化资源之间的平衡可以由开发者自己把握。开发工程模块在模块化系统中,开发模块将变得非常简单,比如我们要开发一个 foo 模块,有模板、样式、交互功能。首先,在 工程模块 目录下创建一个foo目录,并在其中添加js、css、模板、图片等资源:project   ├─ component_modules (生态模块目录)   ├─ components        (工程模块目录)   │  └─ foo   │     ├─ icon.png   │     ├─ foo.css   │     ├─ foo.tpl   │     └─ foo.js   ├─ views             (非模块化资源)   ├─ ...foo.js像写nodejs一样写js模块// 使用__inline函数嵌入其他资源,如果// 是图片,构建后会替换为base64字符串var tpl = __inline('foo.tpl');// 使用__uri函数定位资源,构建后会替换// 为部署后的绝对路径var icon = __uri('icon.png');//像nodejs那样导出APIexports.render = function(dom){     dom[removed] = tpl; }; exports.icon = function(img){     img.src = icon; };foo.tpl模板会被嵌入到js中使用<div class="foo">   <h1 class="foo-title">hello</h1>   <p class="foo-content">     <!--       使用相对路径定位资源,构建后       会被替换为部署后的绝对路径     -->     <img src="icon.png">     blablabla  </p></div>foo.csscss也能模块化.foo {  font-size: 12px; }.foo-title {  /* 使用相对路径引用资源 */   background: url(icon.png) no-repeat;  padding-left: 30px;  font-size: 15px; }.foo-content {  padding: 10px; }将源码中的相对路径构建后替换为部署后的绝对路径,是模块独立性的基本保证。只有将模块所需的样式、结构、逻辑都维护在一起,并且部署后还能定位到,才能保证模块独立可用。关于工程模块的一些约定:与目录同名的js为模块主文件。即foo.js是foo模块的主文件。与js同名的css文件会自动建立依赖关系。比如foo.js自动依赖foo.css。任何文件命名没有约束,主文件的与目录同名要求只是为了引用方便而已。在代码中使用工程相对路径开发,scrat构建会后自动替换成绝对路径。安装生态模块使用生态模块可以提高开发效率,scrat采用 component 规范作为生态规范,因此用户可以从component生态中直接下载组件供项目使用。从生态安装模块之前,需要先在工程中创建一个 component.json 文件,内容为空的json内容 {} 即可:project   ├─ component_modules (生态模块目录)   ├─ components   ├─ views   ├─ component.json    (生态依赖描述)   ├─ ...component有很丰富的组件生态,比如 FortAwesome/Font-Awesome 字体图标库,可以使用scrat直接从GitHub下载放到项目中使用。在项目目录下执行:scrat install FortAwesome/Font-Awesome安装完成后,component_modules目录下下会出现font-awesome模块的安装文件:project   ├─ component_modules (生态模块目录)   │  └─ FortAwesome-Font-Awesome   │      └─ 4.1.0   │         ├─ component.json   │         ├─ css   │         │  └─ font-awesome.css   │         └─ fonts   │            ├─ FontAwesome.otf   │            ├─ fontawesome-webfont.eot   │            ├─ fontawesome-webfont.svg   │            ├─ fontawesome-webfont.ttf   │            └─ fontawesome-webfont.woff   ├─ components   ├─ views   ├─ component.json    (生态依赖描述)   ├─ ...component.json文件也记录了安装的模块名及其版本:{   "dependencies": {     "FortAwesome/Font-Awesome": "4.1.0"   }}这样,一个来自生态的模块就可以在项目中直接使用了。有关模块生态的更多内容请阅读 这里。引用模块开发或安装好一个模块之后,需要做的仅仅就是使用它们。由于资源分为模块化和非模块化两类,因此在不同的资源下引用模块是有所不同的。在模块化js中引用模块如nodejs般使用require函数就可以了// 引用其他模块var foo = require('foo');// 引用当前目录下的文件var conf = require('./conf.js');// 调用模块接口foo.render(document.body);在模块化css中引用模块使用注释中的@require xxx来标记依赖/**  * 引用模块  * @require font-awesome  *  * 引用文件  * @require ./bar.css  */.foo .fa {    font-size: 20px; }在非模块化文件中使用模块非模块化文件通过 模块化框架 来异步加载需要的模块,比如项目的主页面:...[removed][removed][removed]   // 构建后会将__FRAMEWORK_CONFIG__变量   // 替换成框架配置,比如依赖关系、模块别名等   require.config(__FRAMEWORK_CONFIG__);  // scrat会将模块所依赖的资源都加载完成后   // 再执行回调函数   require.async(['foo', 'font-awesome'], function(foo){       foo.render(document.body);   });[removed]...模块化框架的具体工作原理请阅读 这里。 标签:scrat

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值