Demo 官网

最近突发兴趣,想了解点测试方面的内容,同时自己又属于比较懒的,所以期望可以做成自动化测试,写个脚本自动运行,在版本迭代后做回归测试会比较方便,另外,我期望测试框架可以根据id等属性来定位控件,而不是如monkeyRunner那样通过坐标来定位,以便于测试不同机型,找了几个框架后最后决定先试试appium, 因此就有了这篇文章;

基于: 系统: win10 64 Appium: AppiumForWindows_1_4_16_1 脚本: python 3.5

优点(摘自<腾讯Android自动化测试实践>):

  1. 支持多种应用程序测试: Native app(ios/android), hybrid app 和 web app
  2. 不需要被测应用做特殊修改:不需要引入任何额外的测试sdk,不需要添加其他权限,不需要修改签名等...(不过我安装的时候发现会安装两个小程序,影响不大)
  3. 对测试脚本的语言不做限制(比较喜欢这样的跨平台跨语言的,迁移方便)
  4. 支持应用间交互测试

缺点

就是运行有点慢啊... 好像没看到直接截图对比功能,不过可以考虑使用现成的monkeyRunner的,没测试过...

安装:

网上文章应该蛮多的,据说安装比较复杂,我因为之前开发的时候安装过androidSDK,python,node,framework4.5等等,所以一路都还挺顺利,安装过程:

  1. 在系统环境变量中配置 ANDROID_HOME 变量
  2. 安装python并添加到path环境变量中
  3. 安装node(非必需)
  4. 下载appium 并安装,推荐1.4.0以后的版本
  5. 安装appium客户端:
pip install robotframework-appiumlibrary
复制代码
  1. 在开始菜单中点击运行appium服务器

脚本编写

  1. 设置默认编码
# -*- codeing: utf-8 -*-
# 这个最好还是养成习惯,之前使用monkeyRunner的时候就是没设置utf-8,运行的时候连注释中的中文都报错
# 导入所需包
import sys,os,unittest
from time import sleep
from appium import webdriver
复制代码
  1. 设置desired capabilities键值对,主要用于通知 Appium 服务器建立需要的session
'''
python 3.5
测试机型: 红米1s android 4.4.4
直接运行脚本即可
'''
desire_caps = {}
desire_caps['platformName'] = 'Android'
desire_caps['platformVersion'] =  '4.4.4'
desire_caps['appPackage'] ='com.android.contacts'
desire_caps['appActivity'] = '.activities.PeopleActivity'
# 手机名称,这个可以通过命令行adb devices即可获取,我发现在连接多台手机时会有影响
desire_caps['deviceName'] = '9de1f8c7'
# 以下两项主要是在点击输入框的时候,会触发系统输入法,导致可能我们发送的是字符 `234`,但是九宫格中文输入法有可能给出的是 `bei` ,这两个属性就是屏蔽系统输入法,使用appium自己的,但是测试完成后,得自己去系统设置中将输入法切换过来
desire_caps['unicodeKeyboard'] = True
desire_caps['resetKeyboard'] =  True
复制代码
  1. 连接appium
# ip地址在pc上的 appium客户端-设置 中可以看到 `server address` 和 `port`,保持一致即可
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desire_caps)
复制代码
  1. 控件操作
# 通过id查找控件
# 具体的控件id可以通过 `AndroidSDK\tools\uiautomatorviewer.bat` 来直接获取
createContactBtn = driver.find_element_by_id('com.android.contacts:id/fab')
# 模拟点击操作
createContactBtn.click()
# 也可以通过文本查找控件,并输入姓名
name = driver.find_element_by_name(u"姓名") # "姓名" 是输入框的hint值
name.click()
name.send_keys("阿冏Lynxz") # 输入指定的文本,注意这里需要上面desire_caps屏蔽系统输入法才行
# 也可以查找多个控件
# 比如通讯录可能有多个电话号码输入框 `elements` 多了个s
phone = driver.find_elements_by_name(u"电话")
phone[0].click()
phone[0].send_keys("189***0620")
# 判断结果是否符合预期,不通过的话会在这里中断并打印日志
# self.assertEqual(phone[0].text,"15390")
# 截屏,会在当前目录保存指定文件名的图片
driver.save_screenshot("after_input.png")
# 等待,单位:秒
sleep(5)
# 测试完成,退出
driver.quit()
复制代码

控件属性/操作方法:

  • text 控件显示的文本信息,如 edt.text,有点类似于属性获取
  • click() 模拟控件点击操作,如btn.click
  • clear() 清除控件的文本
  • is_enabled() 判断控件是否可用
  • is_selected() 控件是否被选中
  • is_displayed() 控件是否显示
  • get_attribute(self,name) 指定属性名称,返回属性值,若属性名不存在,则返回none
  • send_keys(self,*value) 模拟输入文本到控件

系统API

  • current_activity 获取当前activity信息,可以直接打印,如 print(driver.current_activity)
  • current_context \ context 我在真机上测试的时候都是返回 NATIVE_APP
  • install_app(self,app_path) 安装应用app
  • is_app_installed(self,bundle_id) 在android中传入包名即可
  • get_screenshot_as_file(self,filename) 传入要保存的路径和文件名,可以使用相对路径
  • save_screenshot(self,filename) 跟上一条的功能类似
  • network_connection 查看当前网络信息,整数值, ==!测试出来都是1

碰到的问题:

1. Could not extract PIDs from ps output...

selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"])
复制代码

修改 Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js 文件

this.shell("ps '" + name + "'", function (err, stdout) {...var procs = [];var outlines = stdout.split("\n");outlines.shift() //添加这行...
复制代码

保存后,重新运行appium即可

2. 500 Internal Privoxy Error

好吧,这个是我电脑上开着 shadowsocks,虽然是pac模式,但是appium就是会报错,关闭就好了

3. 使用 send_keys() 时会触发输入法,导致输入异常,中文无法输入

Python Appium实现中文输入分享 解决方法: 在 desire caps 参数中添加如下两个字段:

desire_caps = {}
...
desire_caps['unicodeKeyboard'] = True # 使用unicodeKeyboard的编码方式来发送字符串
desire_caps['resetKeyboard'] =  True # 将键盘给隐藏起来
复制代码

当然,这样测试结束后,发现自己输入法调用不出来,可以到系统设置中切换一些输入法(此时,默认调用的是Appium Android Input manager...)

转载于:https://juejin.im/post/5a433b29f265da431440f9af

Appium使用のhelloworld相关推荐

  1. appium使用 自动化测试

    1. 环境搭建: 1.  安装node.js    v12.13.0. cnpm淘宝镜像配置 :npm install -g cnpm --registry=https://registry.npm. ...

  2. appium(3)-Running Tests

    Running Tests Preparing your app for test (iOS) Test apps run on the simulator have to be compiled s ...

  3. python +appium实现原理_python_appium使用原理

    一. appium介绍 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试. 它使用WebDriver协议驱动iOS,Android和Windows应用程序. 多平台支持: ...

  4. Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)

    简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或 ...

  5. (转载)中文Appium API 文档

    该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...

  6. 中文 Appium API 文档

    该文档是Testerhome官方翻译的 源地址:https://github.com/appium/appium/tree/master/docs/cn 官方网站上的:http://appium.io ...

  7. 自动化测试 - Appium + Python史上最全最简环境搭建步骤

    一,为什么是Appium 借一张图: 1.1 Appium优点 l  开源 l  跨架构:NativeApp.Hybird App.Web App l  跨设备:Android.iOS.Firefox ...

  8. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  9. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

最新文章

  1. 盖茨的背后:坚持到最后一分钟
  2. easyui使用ajax获取json文件,easyui 加载本地json 文件的方法
  3. python装饰器类型错误_有没有办法在继承期间保持装饰器? - python
  4. Mosaic获5.5亿美元住宅太阳能融资贷款
  5. 【解决bug之路】JAVA 之 static
  6. 4009-基于邻接表的边的删除(C++,附思路)
  7. seo从入门到精通_新手学习SEO一个月能学会吗?
  8. double取两位小数_Java语言中:float、double数据类型在内存中是如何存储的
  9. WPF transform示例
  10. vue element ui_vue+element-ui实现表格里嵌套表格
  11. Python 好友管理系统【简单易懂,代码可以直接运行】
  12. 计算机字符编码从0/1到UTF-8
  13. 雅可比矩阵(Jacobian)、海森矩阵(Hessian)
  14. 内网穿透和路由器端口映射什么区别?
  15. 计算机技术在生物学中的应用鲁东大学,项目学习在高中生物学教学中的应用研究...
  16. 论文阅读——Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks
  17. 类似:%u6D59%u6C5F%字符转中文
  18. ireport oracle,用ireport调用oracle存储过程
  19. 最小二乘法多元函数超曲面拟合(python)
  20. c语言读取png文件大小,求助: C语言- 利用libpng读取png大小,并转换为jpg类型图片...

热门文章

  1. nginx 操作笔记
  2. phpexcel用法(转)
  3. 软件工程(1)——对书本的温习
  4. 学习 .net 的一些主要网站
  5. JAVA调用SQL存储过程详解
  6. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
  7. 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )
  8. 【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )
  9. 【开发环境】Mac 中安装 Python3 最新版本 ( 下载 Python 最新版本 | 安装 Python3 | 验证 Python3 )
  10. 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 )