文章目录
环境搭建
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)
1294

被折叠的 条评论
为什么被折叠?



