介绍
Appium 是一个自动化开源工具,支持 iOS 、 Android 和 Windows 桌面平台上的原生、移动 Web 和混合应用的自动化 。
属于UI测试,用来模拟手工测试。
优势
(1)解放双手,但并不完全解放双手,需要手动辅助,并不是100%的自动化。
(2)节省大量时间,可无人看管情况下运行,在流程结束时监视结果。
(3)精准定位问题。
(4)重复使用,在不同手机上都可以运行。
环境
Java jdk ,
android sdk,
Nodejs
驱动
UiAutomator2
参照文档
https://static.kancloud.cn/testerhome/appium_docs_cn/2001682
原理
解释:appium 是有一个用nodejs写的服务器,不需要自己手动写。客户端需要自己写的自动化测试代码。Appium 的核心一个是暴露 REST API 的 WEB 服务器,它接受来自客户端的连接,监听命令并在移动设备上执行,答复 HTTP 响应来描述执行结果。
driver 参数设置
获取页面元素,只能是当前页面
a=driver.page_source
元素查找
查找单一元素:driver.find_element(by=BY.,value=‘’)
查找多个元素:driver.find_elements(by=BY.,value=‘’)
父元素查找子元素:parents.find_elements(by=BY.,value=‘’)
屏幕滑动
self.driver.swipe(width * 0.9, height * 0.5, width * 0.1, height * 0.5, duration=1000)
获取当前的Activity
self.driver.current_activity
等待方式
添加等待的原因:等待元素的出现。
(1)显示等待。
WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)
(2)强制等待。
time.sleep()
不推荐使用。
(3)隐式等待。
self.driver.implicitly_wait(8)
是一个全局的等待方式,每隔0.5s查找一次,如果8秒之内查找到元素,后面的时间就不等待。会导致脚本的执行速度整体变慢。为了所有的find_element方法都有一个很好的缓冲。
ps:推荐使用显示等待,
获取app名字
def get_app_name(file_dir) -> str:
for root, dirs, files in os.walk(file_dir):
files = [file for file in files if file.endswith(".apk")]
if len(files) == 1:
return files[0]
else:
raise FileNotFoundError("{}目录下没有测试包或者存在多个测试包。。".format(file_dir))
获取app包名
```python
def get_app_package_name() -> str:
cmd = "aapt dump badging {} | findstr package".format(appPath)
result = exec_cmd(cmd)
if "package" in result:
package_name = result.strip().split(
" ")[1].split('=')[1].replace("'", "")
return package_name
else:
raise NameError("未获取到package name。")
获取app打开页面
def get_app_launchable_activity() -> str:
cmd = "aapt dump badging {} | findstr launchable".format(appPath)
result = exec_cmd(cmd)
if "launchable" in result:
launchable_activity = result.strip().split('=')[1].replace(
"label", '').replace(" ", '').replace("'", '')
return launchable_activity
else:
raise NameError("未获取到launchable activity。")
获取手机安卓版本
def get_devices_version(device: str) -> str:
if not isinstance(device, str):
raise Exception("device type is should str..")
result = exec_cmd(
"adb -s {} shell getprop ro.build.version.release".format(device))
result = result.strip()
if "error" not in result:
return result
else:
raise Exception("获取设备系统版本失败,无法进行正常测试。。")
pom 框架介绍
POM提供了一种在UI层操作、业务流程与验证分离的模式,这使得测试代码变得更加清晰和高可读性。分层封装。
框架分为三层:
1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。
2.PO层:元素定位、获得元素对象,页面动作
3.测试用例层:业务逻辑,数据驱动!
源码: 在本篇文章内
标签:appium,元素,--,cmd,driver,launchable,python,result,str From: https://blog.csdn.net/afeiying_/article/details/137332488