【Python + ATX基于uiautomator2】之编写unittest自动化测试脚本
不说废话上代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/08/31 09:43
# @Author : zc
# @File : 发起任务.py import uiautomator2 as u2
import unittest
import uiautomator2.ext.htmlreport as htmlreport
from time import sleep class TestcitymineSafety(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.u = u2.connect_usb('708ad0fy')
cls.u.healthcheck() # 解锁屏幕并启动uiautomator服务
# hrp = htmlreport.HTMLReport(cls.u, 'report')
# hrp.patch_click() # cls.u.disable_popups(True) # 允许自动处理弹出框
cls.u.toast.show("测试开始", 3) @classmethod
def tearDownClass(cls):
cls.u.toast.show("测试结束", 3)
cls.u.app_stop_all()
cls.u.service("uiautomator").stop() # 停止uiautomator守护程序,允许其他测试框架如 appium 运行 def setUp(self):
#启动小卖安全
self.d = self.u.session("cn.sqm.citymine_safety") # restart app
sleep(0.2)
# 输入用户名
self.d(resourceId="cn.sqm.citymine_safety:id/et_login_id").send_keys("xxx")
self.d.click(0.924, 0.607)
# 输入密码
self.d(resourceId="cn.sqm.citymine_safety:id/et_login_password").set_text("xxx")
self.d.click(0.924, 0.607)
# 点击登录按钮
self.d(resourceId="cn.sqm.citymine_safety:id/btn_login").click()
print("登陆成功!") def tearDown(self):
#返回首页
# sleep(0.5)
# self.d(className="android.widget.ImageView").click()
#点击我的
self.d(resourceId="cn.sqm.citymine_safety:id/rb_single_center").click()
#退出账号
self.d(text="安全退出账号").click()
#返回首页home
self.d.press("home")
print("返回首页")
# pass def testPrivateFM(self): # 发起任务
# 点击发起任务
self.d(className="android.widget.ImageView", instance=10).click()
# 选择任务类型:全部0、专项1、日常2、火灾3
self.d(resourceId="cn.sqm.citymine_safety:id/tv_select_task_type").click()
sleep(0.5)
for i in range(0):
self.d(className="android.view.View").drag_to(0.498, 0.806, duration=0.5)
self.d(resourceId="cn.sqm.citymine_safety:id/btn_confirm").click()
# 检查单位:IOS开发
self.d(resourceId="cn.sqm.citymine_safety:id/tv_select_inspection_area").click()
self.d(resourceId="cn.sqm.citymine_safety:id/item_tv_next_level").click()
self.d(text='区域1').click()
# 隐患类型:其他0、交通1、维稳2、火灾3
self.d(resourceId="cn.sqm.citymine_safety:id/tv_select_hidden_danger_type").click()
for i in range(0):
self.d(className="android.view.View").drag_to(0.49, 0.8, duration=0.5)
self.d(text='确定').click()
# 隐患描述
self.d(resourceId="cn.sqm.citymine_safety:id/et_hidden_danger_description").set_text("其他问题")
self.d.click(0.924, 0.607)
# 照片:1
self.d(resourceId="cn.sqm.citymine_safety:id/iv_choose_photos").click()
self.d(text=u"手机相册").click()
self.d(resourceId="cn.sqm.citymine_safety:id/v_selected", className="android.widget.ImageView", instance=10).click()
self.d(resourceId="cn.sqm.citymine_safety:id/done").click()
# 违反制度:违反员工行为规范
self.d(resourceId="cn.sqm.citymine_safety:id/iv_add_violation").click()
self.d(resourceId="cn.sqm.citymine_safety:id/item_tv_content_violation", text=u"其他").click()
self.d(resourceId="cn.sqm.citymine_safety:id/tv_complete").click()
# 向上滑动拖拽
self.d(className="android.widget.LinearLayout").drag_to(0.498, 0.00, duration=0.5)
# 整改期限:
self.d(resourceId="cn.sqm.citymine_safety:id/tv_please_the_rectification_date").click()
for i in range(0):
self.d(resourceId="cn.sqm.citymine_safety:id/day").drag_to(0.82, 0.8, duration=0.5)
self.d(text='确定').click()
# 协同人员
list = ["aa", "检查01"]
self.d(resourceId="cn.sqm.citymine_safety:id/item_tv_personnel_name").click()
for i in range(len(list)):
self.d(resourceId="cn.sqm.citymine_safety:id/item_tv_personnel_name", text=list[i]).click()
self.d(resourceId="cn.sqm.citymine_safety:id/tv_complete").click()
# 区域负责人
self.d(resourceId="cn.sqm.citymine_safety:id/item_tv_personnel_name", className="android.widget.TextView",
instance=len(list) + 1).click()
for i in range(2):
self.d(resourceId="cn.sqm.citymine_safety:id/lv_area_manager").click()
self.d(resourceId="cn.sqm.citymine_safety:id/item_tv_department", text=u"区域04").click()
self.d(resourceId="cn.sqm.citymine_safety:id/tv_complete").click()
sleep(0.5)
#提交按钮
self.d(resourceId="cn.sqm.citymine_safety:id/btn_submit").click() #断言
# 向下滑动拖拽
self.d(className="android.widget.LinearLayout").drag_to(0.473, 0.99, duration=0.5)
sleep(0.5)
text = self.d(resourceId="cn.sqm.citymine_safety:id/tv_select_task_type").get_text()
print(text)
self.assertEqual(text,"专项任务","错误!") if __name__ == '__main__':
unittest.main()
具体文章请参考:
感谢:codeskyblue 大神的文章
ATX 《小白入门篇:python uiautomator2 的代码示例 (包含 app 管理,session 控制,toast,htmlreport,unittest ..)》
【Python + ATX基于uiautomator2】之编写unittest自动化测试脚本的更多相关文章
- 【ATX学习大纲】【ATX基于uiautomator2+Python学习】之Android自动化
github学习地址:https://github.com/openatx/uiautomator2 <_io.TextIOWrapper name='<stderr>' mode= ...
- 【Mac + ATX基于uiautomator2】使用weditor时,报错:requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))
产生以下原因找到了:是因为启动了appium,两者冲突,不能同时使用. 之前讲过怎么安装u2([Mac安装,ATX基于uiautomator2]之安装步骤)以及使用weditor, 但是经过一段时间, ...
- 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(二):安装facebook-wda库并编写简易自动化测试脚本
上一篇介绍完如何安装WDA,接下来开始正式安装开发库并编写自动化脚本. 目录: 一.安装facebook-wda库 二.通过WEditor定位元素 三.附录:学习资料 一.安装facebook-wda ...
- 【Ubuntu安装,ATX基于uiautomator2】之安装步骤
Ubuntu系统下安装uiautomator2步骤: 1.安装命令: pip install --upgrade --pre uiautomator2 但是报错: Command "pyth ...
- 【Mac安装,ATX基于uiautomator2】之安装步骤
Mac系统下安装uiaotumator2: 参考网址:<uiautomator2>以及参考github官方文档 注意:下面有坑,如果你没有下面的问题请直接跳转到 1.安装uiaotumat ...
- 【学习ATX基于uiautomator2】之API操作Android方法
具体API可参考:<uiautomator2>以及参考github官方文档 感谢:Ricky_Frog <Python+uiautomator2手机UI自动化测试实战 -- 2. 用 ...
- 使用Python实现基于图像识别的iOS自动化测试
相对于Android来说,iOS比较封闭.这一点,在设计和评估自动化测试方案的时候感觉尤其强烈.iOS平台上没有特别好用的自动化测试工具.苹果针对iOS提供了UI Automation的Instrum ...
- 【Python + ATX基于uiaotumator2】之Android—APP自动化简易例子
上代码: import uiautomator2 as u2 from time import sleep d = u2.connect_usb('608ad0fe') #打开小卖 # d(text= ...
- 基于UiAutomator2+PageObject模式开展APP自动化测试实战
前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...
随机推荐
- Linux发布Tomcat Web项目
1.打包项目,项目右键–>Export –> WAR file 2.将.war文件放到tomcat下的webapps下.重启tomcat即可. ps afux — 查看进程 ki ...
- BlockTransferService 实现
spark的block管理是通过BlockTransferService定义的方法从远端获取block.将block存储到远程节点.shuffleclient生成过程就会引入blockTransfer ...
- 使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
原文:http://www.cnblogs.com/ityouknow/p/8403388.html 随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成, ...
- 处理 WebService 中的 Map 对象
最近,我们讨论了关于 WebService 的相关问题.目前在 Smart 中,可发布两种类型的 WebService,它们是:SOAP 服务 与 REST 服务,您可以根据需要自由选择. 今天,我要 ...
- linux设置定制器自动执行任务
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 ...
- arduino小车入门教学——第三天(arduino基础)
大家好,我是小编, 记上一节内容点击打开链接 我们今天讲arduino基础. 首先在arduino官网上下载程序. Windows解压版 苹果系统的版本号 好,下载过编程软件.我们就来讲编程. 这是类 ...
- iOS学习笔记之蓝牙(有关蓝牙设备mac地址处理) 2
1.创建中心设备,并设置代理 一般情况下,手机是中心设备,蓝牙设备是外围设备. self.centralManager = [[CBCentralManager alloc] initWithDele ...
- mac 上多版本python 共存
Mac上自带了Python2.x的版本,有时需要使用Python3.x版本做开发,但不能删了Python2.x,可能引起系统不稳定,那么就需要安装多个版本的Python. 1.安装Python3.x版 ...
- jQuery--百度百科
JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Oper ...
- Android重写ViewPager改动滑动灵敏度
使用ViewPager作为一个页面进行切换.里面能够存放非常多View,但有时在操作View时不小心滑动一下就有可能跳到下一页,这并非我们想要的,这里就须要重写ViewPager改动它的滑动条 ...