这篇,我们开始来一个实战练习,如何通过appium自动把电脑上一个安卓程序包给安装到一台安卓手机中。在写脚本之前,我们需要统一下方法和工具。我们知道Appium和selenium一样都支持Java和Python,当然还有其他几个语言。那么,我们选择哪个语言来写我们的自动化测试脚本?Java还是Python?我也是第一次学习appium在安卓上的app自动化测试。Java和Python我都会,至少用来写脚本没有问题。我在写第一个例子之前,我搜索查询了一下,国内和国外,关于Python+Selenium的视频教程,几乎没有,文章确实有,但是没有系统性的学习系列。反而Java+Appium很多资料,视频资料也有。所以,我觉得采用Python语言来写Appium的安卓端自动化测试脚本。

1.安装Appium client for python

我们已经确定了Python来写Appium脚本,那么我们需要下载一个Appium Client for Python语言。下载方法和简单,直接在电脑打开cmd界面,这里我们用Python3,输入命令:python -m pip install Appium-Python-Client,回车就自动开始安装,安装过程很快,不到十秒结束。安装了这个,我们才可以在脚本中写导入包语句,例如 from appium import webdriver,看到这个是不是很熟悉,所以,如果学习了Selenium,会更好加速学习appium自动化测试。

2.编程环境安装

这里,我还是采用Pycharm这个Python主流的IDE工具。虽然,这里是学习,每次学习一个API或者自动化一个场景,我们只需要写一个demo文件,运行测试一下,但是我还是建立了一个项目的结构,以后迟早会转移到自动化框架设计上来。例如,我把apk包放在了当前项目根目录下的app文件夹。需要去下载一个手机百度,安卓端的apk包。

一开始,我只在demo这个包下写脚本来练习appium的自动化测试,其他的目录如果没有提到,就全部默认是空文件或者空包,暂时不用去管。

3. 第一个脚本:自动化安装apk包到手机

import os
from appium import webdriverapk_path = os.path.abspath(os.path.join(os.path.dirname(__file__),"..")) #获取当前项目的根路径desired_caps ={}
desired_caps['platformName'] = 'Android' #设备系统
desired_caps['platformVersion'] = '6.0.1' #设备系统版本
desired_caps['deviceName'] = 'KIW-AL10' #设备名称
# 测试apk包的路径
desired_caps['app'] = apk_path + '\\app\\shoujibaidu.apk'
# 应用程序的包名
#desired_caps['appPackage'] = 'com.baidu.searchbox'  
#desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'
#如果设置的是app包的路径,则不需要配appPackage和appActivity,同理反之driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)#启动app

上面的desired_caps是一个字典,一开始定义一个空字典,然后根据键和值,设置了多个参数,这些参数就组成了一个字典对象。为什么需要这个字典参数对象呢?因为,需要手机发送一些手机参数给Appium服务器,这样Appium服务器才能处理请求,才能和手机中的程序联系起来。

windows上的appium是一个服务器,启动后之后,如果是第一次运行上面脚本,appium会在你手机里安装两个软件,一个是Appium Settings, 一个unlock。Appium Settings是一个client端,负责解释和执行Windows端appium的命令,而unlock只是一个用来唤醒手机屏幕,解锁的功能。第一次运行上面脚本,时间有点慢,因为先要安装Appium Settings和Unlock到你手机上,然后执行ADB命令去安装shoujibaidu.apk包,最后启动这个手机百度。启动过程,安卓上会弹出权限请求,例如sd卡读取权限,地理位置获取权限,这些,你需要手动去点击同意。目前,没有更好方法去自动化处理这个权限弹窗,因为这个不是一个app或者浏览器上的alert弹窗,所以,appium暂时不支持自动化这样操作。

4.查看Appium服务运行日志

运行脚本结束,我们点击windows上Appium界面的stop server按钮,看到日志文件,当然可以到处到一个xxxx.log文件,用notepad++来看日志。日志太多,这里简单来看一些,我们很容易看懂的内容。

4.1 Appium创建一个连接session

[info] [Appium] Welcome to Appium v1.6.5
[info] [Appium] Appium REST http interface listener started on 0.0.0.0:4723[info] [HTTP] --> POST /wd/hub/session {"capabilities":{"firstMatch":[],
"alwaysMatch":{"platformName":"Android","platformVersion":"6.0.1","deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\
appium_android_framework\\app\\shoujibaidu.apk"}},"desiredCapabilities":{"platformName":"Android","platformVersion":"6.0.1",
"deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\appium_android_framework\\app\\shoujibaidu.apk"}}
[debug] [MJSONWP] Calling AppiumDriver.createSession() with args: [{"platformName":"Android","platformVersion":"6.0.1",
"deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\appium_android_framework\\app\\shoujibaidu.apk"},null,{"firstMatch":[],
"alwaysMatch":{"platformName":"Android","platformVersion":"6.0.1","deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\
appium_android_framework\\app\\shoujibaidu.apk"}}]
[debug] [BaseDriver] Event 'newSessionRequested' logged at 1504948606634 (17:16:46 GMT+0800 (中国标准时间))
[info] [Appium] Creating new AndroidDriver (v1.20.0) session
[info] [Appium] Capabilities:
[info] [Appium]   platformName: 'Android'
[info] [Appium]   platformVersion: '6.0.1'
[info] [Appium]   deviceName: 'KIW-AL10'
[info] [Appium]   app: 'C:\\Users\\Administrator\\PycharmProjects\\appium_android_framework\\app\\shoujibaidu.apk'
[debug] [AndroidDriver] AndroidDriver version: 1.20.0
[info] [BaseDriver] Session created with session id: f61bbf84-4eba-4500-b3f3-5a810117e323
[debug] [AndroidDriver] Getting Java version[info] [AndroidDriver] Java version is: 1.8.0_121
[info] [ADB] Checking whether adb is present
[info] [ADB] Using adb.exe from C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe
[info] [AndroidDriver] Retrieving device list
[debug] [ADB] Trying to find a connected android device
[debug] [ADB] Getting connected devices...[debug] [ADB] 1 device(s) connected
[info] [AndroidDriver] Looking for a device with Android '6.0.1'
[debug] [ADB] Setting device id to WPV0216912000686
[info] [ADB] Getting device platform version
[debug] [ADB] Getting connected devices...
[debug] [ADB] 1 device(s) connected

上面从启动Appium服务,然后读取Capablilities参数,然后验证ADB是否安装,验证apk包是否放在设置的路径下,然后成功连接手机。后面的日志,也是一堆通过ADB命令来获取手机设备信息和安装和卸载apk包。

Appium基础篇3-第一个appium自动化脚本之自动安装apk包到手机相关推荐

  1. appium自动化脚本之自动安装apk包到手机

    Appium基础篇3-第一个appium自动化脚本之自动安装apk包到手机 这篇,我们开始来一个实战练习,如何通过appium自动把电脑上一个安卓程序包给安装到一台安卓手机中.在写脚本之前,我们需要统 ...

  2. 第一个python自动化脚本

    第一个python自动化脚本-测试页面pageid # -*- coding : utf-8 -*- __authon__ = 'test' import requests import xlrd f ...

  3. Appium基础篇9-元素定位之by_xpath

    我们继续来介绍Appium元素定位方法,有些人做过selenium自动化测试,对xpath元素定位很熟悉.他突然想用xpath来定义手机app页面元素,那么这个是否可以呢?我们在IDE环境输入driv ...

  4. Appium基础篇10-元素定位之by_accessibility_id

    本篇来介绍另外一种元素定位方式,叫by_accessibility_id,它是一个什么鬼呢?因为我们在UI Automator Viewer界面上并没有找到这个字段,我可以告诉你,这个对应的字段是co ...

  5. Appium基础篇5-抓元素工具之UI Automator Viewer

    在开始介绍元素定位之前,我们需要介绍一个工具,这个工具是Android SDK 自带的工具,叫UI Automator Viewer,可以在SDK\tools下找到这个工具并启动它,本篇,来介绍下这个 ...

  6. Selenium基础篇之5-第一个完整的自动化测试脚本

    前面文章,我们介绍了如何采用XPath表达式去定位网页元素,在掌握了如何抓取或者如何书写精确的XPath表达式后,我们可以开始写自己的第一个真正意义上的webui 自动化测试脚本,就相当于,你在学习P ...

  7. APPium+Python编写真机移动端自动化脚本

    前置条件 完成软件和环境的安装后就可以开始移动端自动化脚本的编写了. 连接设备 手机打开USB调试模式,连接手机.此时去命令窗口查看自己的设备是否已经连接. 让后打开Appium Server,进行配 ...

  8. 【高级篇 / ZTNA】(7.0) ❀ 05. 域用户自动安装 FortiClient (上) ❀ FortiGate 防火墙

    [简介]中大型企业通常会使用Windows Server对电脑进行管理,我们可以利用Windows Server的自动安装功能,将所有电脑安装FortiClient客户端.   创建组织单位和用户 通 ...

  9. Appium基础篇16-appium截图方法

    这篇介绍一个截图方法,在自动化测试过程中,出现问题,自动截图是很有必要的.在appium中同样有好几种截图方法(其实就是selenium方法).我们这里介绍一个常用截图方法,该方法叫get_scree ...

最新文章

  1. 思维dp ---- K步最短路 D. Explorer Space
  2. CAS做单点登陆(SSO)——集成BIEE 11g
  3. Java集合7 (NavigableSet)
  4. 分享Kali Linux 2016.2第50周虚拟机
  5. 获取指定文件夹下的所有文件名
  6. Java并发编程实战~ThreadLocal
  7. CAN总线技术 | 物理层04 - 终端电阻与双绞线(特性阻抗120欧)
  8. ElasticSearch概述(一)——简介
  9. hive+mysql+速度_半小时搞定Hadoop+Mysql+Hive+Python
  10. Docker学习总结(40)——Docker常见应用场景再总结
  11. 谷歌拼音输入法快速切换中英文解决中英文混合打字问题
  12. 豆瓣python网络数据采集器代理_Python 网络数据采集1
  13. leetcode之String to Integer (atoi)
  14. hover 插入html元素,解决hover生成border造成的元素移动方法
  15. Python 数据分析微专业课程--项目实战09 房价影响因素挖掘
  16. SQL 创建、更新、删除表、重命表名
  17. 采用普里姆算法求最小生成树
  18. 【ubuntu16.04 LTS】ping百度通,但浏览器打不开百度网页
  19. mac 双开应用的方法
  20. PCLINT(2):MVG NEST LOC (圈复杂度 嵌套深度 代码行数)

热门文章

  1. java毕业设计游戏交易平台Mybatis+系统+数据库+调试部署
  2. cs架构下抓包的几种方法
  3. Android获取AP热点IP,获取连接到本机AP热点设备的IP地址
  4. 经典游戏中的游戏编程
  5. 易语言与服务器即时通讯,求易语言简单即时通讯
  6. 网站|数据分析、大数据、数据挖掘或者数据分析学习相关的网站
  7. 2014年6月5日 百度马上有钱邀请码 百度邀请码 邀请码
  8. 小爱同学调用系统接口,语音下发任务
  9. Windows系统route add delete change路由增加改变删除
  10. 【深度学习】使用深度学习检测混凝土结构中的表面裂缝