学习记录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运行本地输入学习记录Mac+Appium+unittest+Python实现简单android的ui自动化

学习记录Mac+Appium+unittest+Python实现简单android的ui自动化

学习记录Mac+Appium+unittest+Python实现简单android的ui自动化

点击运行就可以看到自己手机的计算器在进行启动点击,然后在appium上点击自己需要操作的按键,就可以解析到他的唯一识别参数进行定位例如:

学习记录Mac+Appium+unittest+Python实现简单android的ui自动化

这个就是通过resource-id定位的   self.driver.find_element_by_xpath("//*[@resource-id='com.android.bbkcalculator:id/digit7']").click()

本篇文章是我自己的学习记录,也希望对新手想入门的童鞋有些帮助,大神也可以来踩我多多提提建议