移动端自动化Appium框架

环境搭建

JAVA

1、安装JDK
从官网下载所需安装包,默认安装即可。
https://www.oracle.com/cn/java/technologies/downloads/

2、配置环境变量
设置 - 编辑系统环境变量 - 环境变量。

  • 系统变量下新建JAVA_HOME,值为步骤1安装的JDK路径
  • 系统变量下新建CLASSPATH,值为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
  • 进入path变量,添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

3、验证安装是否成功
打开cmd发送java,不报错即为成功。

Android SDK

1、下载SDK安装包
解压至任意目录下,目录不可以有中文!
https://dl.google.com/android/adt/adt-bundle-windows-x86_64-20140624.zip

2、配置环境变量
设置 - 编辑系统环境变量 - 环境变量。

  • 系统变量下新建ANDROID_HOME,值为步骤1安装包解压路径\sdk
  • 进入path变量,添加%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools

3、验证安装是否成功
打开cmd发送adb,不报错即为成功。

Genymotion模拟器

1、安装Genymotion
从官网下载所需安装包,默认安装即可。
https://www.genymotion.com/product-desktop/download/

2、安装VirtualBox和Oracle插件
安装完Genymotion后根据提示安装VirtualBox和Oracle插件。

3、验证安装是否成功
桌面会出现相关应用图标。

4、虚拟机镜像导入
在VirtualBox中导入ova文件,管理 - 导入虚拟电脑 - 选择ova文件 - 下一步要勾选重新初始化所有网卡的MAC地址 - 导入。接着另外打开Genymotion,启动导入的虚拟机。ova文件可以在网上找资源。

5、为虚拟机提供安装apk功能
安装genymotion ARM插件,提供x86运行环境,即可运行apk。需要安装对应安卓版本的插件,将zip文件拖入虚拟机中,安装完成后重启虚拟机。插件安装包可以在网上找资源。

介绍

Appium是跨平台的移动端的自动化测试框架,可用于测试原生应用、移动网页应用和混合型应用。

官方文档:https://appium.io/docs/zh/2.5/
安装步骤:https://appium.io/docs/en/latest/quickstart/install/
客户端下载:https://www.cnblogs.com/wx170119/p/12558331.html

Appium基础操作

配置参数

1、访问本地appium服务器,获取driver对象
2、appium将driver对象调用的方法转换为post请求提交到服务器
3、appium将接收到的post请求发送给手机,由手机执行

from appium import webdriver
import time

# 创建字典来存放启动参数
desired_caps = dict()
# 平台名称,不区分大小写
desired_caps['platformName'] = 'Android'
# 安卓版本,根据实际填写,5.4.3可以写成5.4.3、5.4、5
desired_caps['platformVersion'] = '5.1'
# 设备名称
desired_caps['deviceName'] = '192.168.56.101:5555'
# 打开应用
desired_caps['appPackage'] = 'com.android.settings'
# 打开界面
desired_caps['appActivity'] = '.Settings'

# 连接appium本地服务器,需要先启动服务器才能连接成功
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

#等待5s后退出应用
time.sleep(5)
driver.quit()

跳转应用

从一个应用跳转到另一个应用

# appPackage:包名,appActivity:界面
driver.start_activity(appPackage, appActivity)

获取包名和界面名

# 包名
driver.current_package
# 界面名
driver.current_activity

关闭应用

# 关闭当前操作的app,不会关闭驱动对象
driver.close_app()
# 关闭驱动对象,同时关闭所有关联的app
driver.quit()

安装/卸载应用

# 安装应用,app_path:apk路径
driver.install_app(app_path)
# 卸载应用,app_id:应用包名
driver.remove_app(app_id)
# 应用是否已安装
driver.is_app_installed(app_id)

置于后台

# 热启动行为,时间单位为秒
driver.background_app(seconds)

元素

元素查看

UIAutomatorViewer,用以扫描和分析android应用的UI控件的工具。

1、在android的sdk/tools文件夹中打开uiautomatorviewer.bat
2、连接设备或打开模拟器
3、启动待测试app
4、点击窗口左上角的Device Screenshot
5、点击需要查看的控件
6、在右下角Node detail查看详细信息

UIAutomator2,自动化测试框架,环境搭建步骤:https://blog.youkuaiyun.com/WEB___/article/details/135905550?spm=1011.2415.3001.5331

元素定位

元素定位是基于当前屏幕范围内展示的可见元素。

单个元素

属性值唯一。

# 通过resource_id定位
driver.find_element_by_id(resource_id)
# 通过class定位
driver.find_element_by_class_name(class)
# 通过xpaht定位,//*[@属性名=属性值]
driver.find_element_by_xpath(xpath)

一组元素

具有相同属性值的一组元素。

# 通过resource_id定位
driver.find_elements_by_id(resource_id)
# 通过class定位
driver.find_elements_by_class_name(class)
# 通过xpath定位,//*[contains(属性名,属性值包含的内容)]
driver.find_elements_by_xpath(xpath)

报错

1、使用 find_element_by_xx 方法,如果传入一个没有的特征,会报NoSuchElementException的错误。
2、使用 find_elements_by_xx 方法,如果传入一个没有的特征,不会报错,会返回一个空列表。

元素等待

定位的元素需要等待时间,无法立即加载出来,如网络速度、服务器处理请求、电脑配置等原因,此时若直接定位可能会报错。

元素等待即在指定时间内等待的过程。

隐式等待

driver.implicitly_wait(seconds)

设置超时时间后,后续所有定位元素的超时时间为同一个值,超出时长抛出NoSuchElementException异常。

显式等待

from selenium.webdriver.support.wait import WebDriverWait

# 创建WebDriverWait对象
# poll_frequency默认是0.5秒,即0.5秒找一次
wait = WebDriverWait(driver, 5, poll_frequency=1)
# 获取元素并设置超时时间和频率
search_button = wait.until(lambda x: x.find_element_by_xpath("//*
[contains(@content-desc,'收起')]"))
# 点击搜索按钮
search_button.click()

为定位元素设置不同的等待时长,超出时长抛出TimeoutException异常。

区别

显式等待隐式等待
全局元素单个元素
driver直接调用封装在WebDriverWait类中

注意:元素等待和sleep()的区别在于,后者是固定等待时间,而元素等待可以避免不必要的等待时间。

元素操作

点击

element.click()

输入框输入和清空

element.send_keys(value)
element.clear()

默认输入中文无效,需要在配置中增加以下参数

desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True

文本内容

element.text

位置和大小

# 返回xy坐标
element.location
# 返回宽度和高度
element.size

属性值

# value:元素的属性名
element.get_attribute(value)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值