学习记录Mac+Appium+unittest+Python实现简单android的ui自动化
准备阶段:
需要准备的软件及插件
brew、jdk、android sdk、node、npm、cnpm、appium、python、pycharm、pip、Appium-Python-Client
一、安装brew,Mac的好朋友brew如果有的可以跳过,没有的有必要安装下这个,因为这个对于mac来说后面很方便安装其他各种插件应用等
1.安装
打开终端输入:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2.检查是否安装成功 brew -v
二、安装 node
1.使用brew安装 brew install node
2.执行node -v 查看是否安装成功 npm -v 查看版本信息
注:我用的是cnpm这里需要安装下,也可以不用,这里我用它安装的appium所以就安装了cnpm
1.打开终端,输入sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
三、安装android sdk
1.安装下载Android SDK 后配置环境变量(https://pan.baidu.com/s/1mFNkEIwhDpCKvDvr-0IFUQ 密码:um7z) 通过网盘安装
2.官网直接安装下载:http://tools.android-studio.org/index.php/sdk 下载之后解压任意路径即可一般放在/Users/”你自己的解 压路径“/android-sdk-macosx 如果下载解压之后没有platform-tools 文件夹可以下载放到/android-sdk-macosx路径下http://www.androiddevtools.cn/ 这里网上有很多办法,安装成功就好了
四、安装python3.5 这里推荐使用3.5及以上 mac自带的2.7后面可能有些插件包不会兼容具体安装办法网上也有很多,推荐再继续安装一个pycharm方便使用这里再安装一个python很常用的pip 安装pip sudo easy_install pip 后续会用到
五、xcode安装 App Store搜索xcode 进行安装(mac需要xcode)
六、安装jdk我用的是jdk1.8.0_65.jdk 版本的随意安装网上很多jdk的安装办法和检查办法
七、安装appium
1.官方下载:http://appium.io/ 通过dmg安装
2.也可以命令安装 cnpm install -g [email protected]版本 或者 sudo cnpm install -g [email protected]版本信息
3.安装完毕后输入 appium 返回Welcome 说明成功了
安装必要的依赖包
1.安装appium-doctor npm install -g appium-doctor
2.安装selenium、Appium-Python-Client
3.命令:sudo pip install Appium-Python-Client 或者 selenium(后续appium中可能会依赖这个包最好还是安装上)
4.这里列举下可能会用到的包
pip install Appium-Python-Client
pip install selenium
pip install configparser
pip install pyyaml
pip install schematics
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller
检查是否安装成功终端输入:python3 回车 然后输入import selenium 即可
八、环境变量的配置
打开终端,依次输入命令
touch .bash_profile
open -e .bash_profile
在这个文件下添加下面的文字信息
# 配置 JDK
JAVA_HOME=/xx/xx/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home #这里是存放jdk目录
export JAVA_HOME
CLASS_PATH="$JAVA_HOME/lib"
PATH=".$PATH:$JAVA_HOME/bin"
export PATH=/usr/local/bin:$PATH
# 配置 SDK
export ANDROID_HOME=/usr/xx/xx/android-sdk-macosx # 这里是自己存放sdk的目录
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
编辑完成关闭后在终端输入:source .bash_profile 然后再输入abd 看看返回什么不返回command not found 说明配置成功了
九、这里推荐几个adb常用命令用来获取appium所需的必要参数
adb命令使用 这些是python中需要用到的参数
插上手机,打开开发者选项后
1.检查设备唯一id 终端输入 adb devices
2.查看启动应用 adb shell ps 用于查看包名
3.也可以 aapt d badging 安装包绝对路径 查看包名信息
4.命令1:adb shell dumpsys activity | grep -i run 也可查看到包名对应在运行的Activity
命令2:adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
十、代码部分使用手机自带的计算器做例子
1.打开Pycharm
#coding=UTF-8
import os
import unittest
from selenium import webdriver
from appium import webdriver
import time
class DpAppTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android' #设置平台
desired_caps['platformVersion'] = '9.0' #系统版本
desired_caps['deviceName'] = 'xx' #设备id
desired_caps['autoLaunch'] = 'true' #是否自动启动
# desired_caps['app'] = PATH('/AppiumCase/apps/xx.apk' #安装包路径,放在该py文件的目录
desired_caps['appPackage'] = 'com.android.bbkcalculator' # 包名每个手机的不一样
desired_caps['appActivity'] = '.Calculator' # 启动的activity
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
def tearDown(self):
self.driver.quit() #case执行完退出
def test_dpApp(self): #需要执行的case
# 每个人的手机定位的元素信息都不同,这个可以自己通过appium进行定位筛选,这里是我的机型的定位信息 self.driver.find_element_by_xpath("//*[@resource-id='android:id/button1'][@text='Force Close']").click() self.driver.find_element_by_xpath("//*[@resource-id='com.android.bbkcalculator:id/digit7']").click() self.driver.find_element_by_xpath("//*[@resource-id='com.android.bbkcalculator:id/plus']").click() self.driver.find_element_by_xpath("//*[@resource-id='com.android.bbkcalculator:id/digit6']").click() self.driver.find_element_by_xpath("//*[@resource-id='com.android.bbkcalculator:id/equal']").click()
简单实用的几种我列举下,详情可以参考这位大神的博客:https://blog.csdn.net/crisschan/article/details/50416860
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'工作台')]") #通过xpath的contains模糊查询
self.driver.find_element_by_id(“XXXid”) # 通过id精准定位,必须是唯一
self.driver.find_element_by_class_name(“XXX”) # 通过class定位
self.driver.find_element_by_xpath("//*[@resource-id='']") #通过 resource-id 精准定位一般是和id相同的常用的事件方法
self.driver.find_element_by_xpath("//*[@resource-id=‘’]”).click() # 点击
self.driver.find_element_by_xpath("//*[@resource-id=‘’]”).send_keys("123456789”) # 输入
self.driver.find_element_by_xpath("//*[@resource-id=‘’]”).clear() # 清除
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(DpAppTests)
unittest.TextTestRunner(verbosity=2).run(suite) #执行case集
PS:这里我再补充一下新手定位元素怎么定位,之前我学习的时候也比较困惑,无头绪很痛苦后面知道入门就好多了否则很影响积极性
前提条件手机连接的电脑且开发者选项打开了允许调试
1.打开appium运行本地输入
点击运行就可以看到自己手机的计算器在进行启动点击,然后在appium上点击自己需要操作的按键,就可以解析到他的唯一识别参数进行定位例如:
这个就是通过resource-id定位的 self.driver.find_element_by_xpath("//*[@resource-id='com.android.bbkcalculator:id/digit7']").click()
本篇文章是我自己的学习记录,也希望对新手想入门的童鞋有些帮助,大神也可以来踩我多多提提建议