Appium App自动化入门与实践

致读者

整理文档不易,未经授权,禁止转载.
本章内容纯入门,深入学习请拜读 官方 Appium Api

Appium(GitHub)是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试 – 百度百科
画了一个简单的UML,个人理解,仅限参考,非官方

python Appium Desktop Adb 设备(模拟器/真机) 0.编写操作逻辑 1.代码逻辑转adb命令 4.上下文 5. 上下文处理加工 2.执行命令 3.响应操作 python Appium Desktop Adb 设备(模拟器/真机)

理解工具

正确的选择工具可以让我们学习更有效率
网上的流程图我就不粘贴了,还是文字描述可能会简单一点,至少我这么觉得.

  1. PyCharm Python 语言开发工具,我尝试过IDEAAndroid Studio开发工具,但这个工具在网上我能找到很多Appium相关的问题解决.
  2. JDK Android SDK , Appium都依赖JDK环境
  3. Python 我也尝试过用Java,因为这是我工作用的语言,但是我还是Python,它可以更快入门,我们可以省去很多依赖包,编译,打包的过程
  4. Appium Desktop : 这是我们要学习的主要工具,我简单的理解为提供多种语言的Api,我观察日志发现它只是一个将Api的请求转化为Android adb命令的形式去操作(Andriod:手机/虚拟机), 注意还有个Appium命令版的,通过Node.JS(Npm)安装的,出现( A session is either terminated or not started )问题找了许久都没相关解决,安装桌面版的一切正常
  5. Android SDK: 安卓SDK , 内置多种工具,多种版本虚拟机安装工具等,我知道Appium需要用到它的环境变量(ANDROID_HOME),以及Adb工具.
  6. Adb 我觉得有必要一提这个东西, Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限, 在Android SDK 平台工具软件包中,在*/android_sdk/platform-tools/adb.exe

工具下载

Appium入门工具包集合(百度云)下载,全都在里面了
提取码5m5y

特别准备的新系统

保证环境干净
在这里插入图片描述

1 JAVA JDK

1.1 安装

在这里插入图片描述

1.2 环境变量

在这里插入图片描述

1.3 验证

在这里插入图片描述

2 Android SDK

2.1 安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 环境变量

在这里插入图片描述

2.3 验证

在这里插入图片描述

3 Genymotion

安卓模拟器:市面很多虚拟机工具都可以,不一定用sdk中的安装,比如国产雷电,逍遥,夜神,比较推荐Genymotion(个人版免费)

安卓真机:Usb连接笔记本,启动开发者模式

  1. 设置Usb调试
  2. 设置Usb配置 RNDIS(Usb以太网) ps:其他手机不知道有没有,三星s8+是要选择这个
  3. 通过adb devices 就能看到设备了

下面讲安卓模拟器安装的方式

3.1 查看设备

请牢记这个很常用的命令

#启动adb服务
adb start-server
#查看设备(当前无设备)
adb devices

在这里插入图片描述

3.2 安装

这里我们安装了一个 Android8.1 64位 x86架构 的手机镜像,文件有点大,建议只选装一个版本
在这里插入图片描述

3.3 启动

在这里插入图片描述
此处需要注册一个个人账号,比较麻烦,但是这个模拟器用法比sdk安装简单很多
在这里插入图片描述
在这里插入图片描述

3.4 选择设备

在这里插入图片描述

3.5 安装配置设备

在这里插入图片描述
下载安装中
在这里插入图片描述

3.6 安装设备

在这里插入图片描述

3.7 查看设备编号

在这里插入图片描述

4 Appium-Desktop

4.1 安装

在这里插入图片描述

4.2 检查配置

在这里插入图片描述

4.3 启动

在这里插入图片描述

4.4 验证

在这里插入图片描述

4.5 创建新会话

在这里插入图片描述
上图中的配置,可直接粘贴进替换右边的JSON

{
  "platformName": "Android",
  "platformVersion": "8.0.0",
  "deviceName": "192.168.12.101:5555",
  "appPackage": "com.android.calculator2",
  "appActivity": ".Calculator",
  "noReset": true,
  "newCommandTimeout": "9000"
}

4.6 从设备中提取关键参数

参数 :appPackage appActivity

adb shell
logcat | grep ActivityManage

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.7 启动会话

在这里插入图片描述
在这里插入图片描述

4.8 如何使用录制功能

在这里插入图片描述
接下来我们可以安装Python,搭建环境运行这个代码

4.9 如何提取元素

在这里插入图片描述
面的一个练习中会用到这里的元素提取

5 Python

5.1 安装

在这里插入图片描述

5.2 环境变量

配置环境变量

5.3 验证

在这里插入图片描述

6 PyCharm

6.1 安装

在这里插入图片描述

6.2 启动

在这里插入图片描述

6.3 创建新工程

在这里插入图片描述

6.4 选择项目类型

在这里插入图片描述

6.5 新增Appium-Python-Client模块

在这里插入图片描述
在这里插入图片描述

6.6 运行录制的代码

在这里插入图片描述

6.7 效果图

在这里插入图片描述

8 场景 : 自动登录

8.1 提取关键参数

参数 :appPackage appActivity

adb shell
logcat | grep ActivityManage

打开App工程日志,这里提取的值,用于程序中的appPackage和appActivity
在这里插入图片描述
查看我的按钮xPath元素位置,复制出来,代码中的xpath,id取值类似,不一一列举
在这里插入图片描述
我们又点击了我的按钮,得到了一个新的Activity , 说明不同的页面可能有不同的Activity,我们可以用他在程序中做一个控制,比如等待这个Activity加载出来我们再执行下一个动作
在这里插入图片描述

8.2 模拟登陆效果

输入的假是假账号,登陆失败是当然的
在这里插入图片描述
这是一段不健全的代码,可能某个页面延迟了也许就出现了异常.

from time import sleep

from appium import webdriver

caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "8.0.0"
caps["deviceName"] = "192.168.12.101:5555"
caps["appPackage"] = "com.jifen.qukan"
caps["appActivity"] = "com.jifen.qkbase.main.MainActivity"
caps["noReset"] = True
caps["newCommandTimeout"] = "9000"

driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
## 显示等待5秒
sleep(5) 
## 我的按钮xPath
myButonXpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout/android.widget.FrameLayout[5]/android.widget.LinearLayout/android.widget.TextView'
## 点击我的按钮
driver.find_element_by_xpath(myButonXpath).click() 
# 这里写入点击我的后登陆页的Activity最大等待10秒
loginActivity = '.login.V2MainLoginActivity'
## 有这个Activity,那么开始进入登陆操作
if driver.wait_activity(loginActivity, 10) :
    nameInputId='com.jifen.qukan:id/bo6'  ## ID方式获取用户名框
    passwordInputId='com.jifen.qukan:id/bo7'  ## ID方式获取密码
    loginButonId='com.jifen.qukan:id/i1'  ## ID方式获取登陆按钮
    driver.find_element_by_id('com.jifen.qukan:id/br1').click()  ## ID方式获取密码类型登陆
    sleep(2) ## 点击密码类型登陆,等待用户密码框加载,显示等待2秒
    driver.find_element_by_id(nameInputId).send_keys('18888888888')  ## 键入用户名
    driver.find_element_by_id(passwordInputId).send_keys('88888888') ## 键入密码
    driver.find_element_by_id(loginButonId).click() ## 触发登陆点击
    sleep(2) ## 点击登陆后,显示等待2秒
driver.quit()

9 学习资料

10 过程中可能的问题

异常
Could not find 'adb.exe' in PATH. Please set the ANDROID_HOME or ANDROID_SDK_ROOT environment variables to the corect Android SDK root directory path.
解决: 未配置/错误配置 ANDROID_HOME ,配置 ANDROID_HOME 即可

异常
An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device.
解决: 未找到虚拟机或者是真机
1 . 请检查USB线
2. adb kill-server 再 adb start-server 重启adb服务(前提是配置了adb.exe(环境变量))

异常
An element could not be located on the page using the given search parameters
解决: try + except 做异常处理,或设置合理的延迟
1 . 元素因为网络或是反应慢,没有加载出来,设置合理的延迟或者控制
2. 在滑动页面时,页面出现了一半,另一半没有加载出来,获取失败.

异常
电脑下载的apk安装包,通过adb install **.apk 安装后,软件无法联网,可以通过应用市场来安装工具

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值