网站首页 > java教程 正文
扼要:
1、了解python+appium进行APP的自动化测试实例;
2、能根据实例进行实训操作;
本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Android、ios。本课程以Android为例。
学习本章节前提条件,测试人员需要有一定的python基础。
python+appium环境搭建
1、安装python,下载地址:https://www.python.org/downloads/
2、安装Appium-Python-Client库,命令:pip install Appium-Python-Client
3、安装jdk,下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
4、安装Android sdk,下载地址:https://www.androiddevtools.cn/
5、安装appium,下载地址:https://appium.io/
python+appium实例操作说明
1、启动appium服务;
2、连接Android手机或者安装安卓手机模拟器并启动,也启动需要测试的APP;
3、使用adb devices命令,查看手机的驱动名称;
4、使用aapt dump badging ***.apk 命令,进行获取APP包名、activity名;
5、在Android的tools文件夹下运行uiautomatorviewer.bat,该工具可以进行APP的元素定位,同时也可以获取包名。
6、项目目录结构
文件夹结构如下图所示:
testCase--存放测试用例的文件夹
testImg--存放测试结果的截图文件
testLib--存放测试脚本需要依赖的第三方库文件
testLog--存放测试结果日志文件
testParame--存放定位元素的参数,为python文件
testReport--存放测试报告文件,为html文件
mainRun.py--入口文件
7、核心代码解说
7.1、入口文件mainRun.py
7.2、myPageIni.py文件
myPageIni.py文件是在testParame文件夹下,其主要是设置元素的定位参数。
7.3、baseIni.py文件
baseIni.py文件也是在testParame文件夹下,其主要是配置appium启动的参数。
# 定义一个空的字段变量
desired_caps = {}
# 给platformName健赋值,因为用安卓手机测试,所以值为Android
desired_caps['platformName'] = 'Android'
# 给platformVersion健赋值,值为手机的当前系统版本
desired_caps['platformVersion'] = '7.1.1'
# 给deviceName健赋值,值为手机的驱动名称,用adb devices 可以查看获得
desired_caps['deviceName'] = '4769f426'
# 给appPackage健赋值,值为app的包名,可以用adb shell dumpsys activity | findstr mFocusedActivity 查看获得
desired_caps['appPackage'] = 'com.liuqing.test'
# 给appActivity健赋值,值为app的Activity,可以用aapt dump badging liuqing.apk 查看获得,其中launchable-activity冒号后面的就是其值
desired_caps['appActivity'] = 'com.ssf.tckotlin.ui.activity.welcome.WelcomeActivity'
# appServer 是启动的服务器
appServer='http://localhost:4723/wd/hub'
7.4、myPage.py文件
myPage.py文件是在testCase文件夹下,其主要处理app的自动化测试逻辑。
7.5、HTMLTestRunner.py文件
HTMLTestRunner.py文件是在testLib文件夹下,其是外来库,是生成html的测试报告库,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
8、测试报告
测试脚本运行后,会自动生成html报告,格式内容如下:
Appium定位
1、常用识别元素的工具
uiautomator:Android SDK自带的一个工具,在tools目录下
monitor:Android SDK自带的一个工具,在tools目录下
Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能
2、通过id定位
例子:driver.find_element_by_id("***")
3、通过class_name定位
例子:driver.find_element_by_class_name("***")
4、通过xpath定位
例子:driver.find_element_by_xpath("***")
5、通过text定位
例子:driver.find_elements_by_android_uiautomator("***")
6、通过css_selector定位(webview)
只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致;例子:driver.find_element_by_css_selector("***")
7、通过link_text定位(webview)
只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致;例子:
driver.find_element_by_link_text("***")
8、通过name定位
例子:
driver.find_element_by_name("***")
难点
1、安卓7.0系统,在appium1.4版本以下不能定位到元素;
2、启动uiautomatorviewer.bat,获取页面元素时,报错;打开 uiautomatorviewer 时报错:
Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist! Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!
解决方法:
拔出usb数据线,重新连接手机;重新启动即可。
3、常出现捕捉不到元素的情况,解决方法增加一个停留时间:time.sleep(秒数字)
猜你喜欢
- 2025-04-06 软件测试常规测试方法有哪些?(软件测试常规测试方法有哪些内容)
- 2025-04-06 一个Web自动化测试的简单方法(web自动化测试怎么做)
- 2025-04-06 软件测试|web自动化测试神器playwright教程(一)
- 2025-04-06 测试小白基于java的selenium自动化测试环境搭建(一)
- 2025-04-06 人工智能丨DeepSeek自动生成测试用例方法
- 2025-04-06 「总结」用selenium工具做软件自动化测试的面试题及答案,码住
- 2025-04-06 一文掌握:5大自动化测试难题及高效解决方案
- 2025-04-06 利器 | Java 接口自动化测试首选方案:REST Assured 实践 (一)
- 2025-04-06 自动化测试(自动化测试框架)
- 2025-04-06 Java自动化测试,必备知识梳理及面试题分享
你 发表评论:
欢迎- 最近发表
-
- 一招解决vscode报java插件版本不一致以及相关缓存引起的问题
- 关于Java 8版本的理解(java中的接口怎么理解)
- Java 9 到 Java 16 的版本演进:一次模块化革命和语言的持续进化
- 如何选择合适的Java版本(如何选择jdk版本)
- 晚会互动小游戏(晚会节目互动小游戏)
- 基于JavaSwing的象棋游戏系统java休闲游戏jsp源代码Mysql
- Java 猜字母游戏!会写会玩才是真本事!
- 基于JavaSwing的贪吃蛇大作战java休闲游戏jsp源代码mysql
- Java & Python 康威生命游戏 - 命令行版
- 高玩随机种子无损速通《我的世界》10分钟不到刷新世界纪录
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)