【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 ...
随机推荐
- python3中的range函数
奇怪的现象 在paython3中 print(range(10)) 得出的结果是 range(0,10) ,而不是[0,1,2,3,4,5,6,7,8,9] ,为什么呢? 官网原话: In many ...
- [Android 新特性] 有史来最大改变 Android 5.0十大新特性
距离Android系统上一次重大更新不到一年的时间,谷歌再一次从KitKat升级到了Lollipop,而两次都使用糖果来命名,营销的目的显露无 遗.当我们首次看到Android 5.0 Lollipo ...
- scrapy-splash抓取动态数据例子十三
一.介绍 本例子用scrapy-splash通过搜狗搜索引擎,输入给定关键字抓取微信资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 ...
- scrapy-splash抓取动态数据例子十二
一.介绍 本例子用scrapy-splash通过搜狗搜索引擎,输入给定关键字抓取资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二. ...
- 【Hadoop】HDFS原理、元数据管理
1.HDFS原理 2.元数据管理原理
- Spark createDirectStream 维护 Kafka offset(Scala)
createDirectStream方式需要自己维护offset,使程序可以实现中断后从中断处继续消费数据. KafkaManager.scala import kafka.common.TopicA ...
- centos7 minimal connect: Network is unreachable(转)
新装的centos7,果然是很崭新啊. 装好之后打算看一下局域网的地址,然后就ip addr(centos 7 已经去掉了ifconfig这个命令).并没有显示局域网的ip地址. 然后我尝试ping ...
- J2EE规范
J2EE是由SUN提出的用于简化开发企业级应用程序的一系列规范的组合,J2EE基于中间层集成的框架的方式为应用开发提供了一个统一的开发平台.基于容器管理.组件化的模型为企业建立一个高可用性,高可靠性可 ...
- Docker使用国内镜像
vim /lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https:/ ...
- Unity Android && Ant Automate Build 之一
这几天抽空研究下Android SDK 自动化打包.顺便温习下Unity 与 Android 交互机制. 一.Unity 与 Android 的 消息传递机制 Example: 导出 Android ...