不说废话上代码:

#!/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自动化测试脚本的更多相关文章

  1. 【ATX学习大纲】【ATX基于uiautomator2+Python学习】之Android自动化

    github学习地址:https://github.com/openatx/uiautomator2 <_io.TextIOWrapper name='<stderr>' mode= ...

  2. 【Mac + ATX基于uiautomator2】使用weditor时,报错:requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))

    产生以下原因找到了:是因为启动了appium,两者冲突,不能同时使用. 之前讲过怎么安装u2([Mac安装,ATX基于uiautomator2]之安装步骤)以及使用weditor, 但是经过一段时间, ...

  3. 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(二):安装facebook-wda库并编写简易自动化测试脚本

    上一篇介绍完如何安装WDA,接下来开始正式安装开发库并编写自动化脚本. 目录: 一.安装facebook-wda库 二.通过WEditor定位元素 三.附录:学习资料 一.安装facebook-wda ...

  4. 【Ubuntu安装,ATX基于uiautomator2】之安装步骤

    Ubuntu系统下安装uiautomator2步骤: 1.安装命令: pip install --upgrade --pre uiautomator2 但是报错: Command "pyth ...

  5. 【Mac安装,ATX基于uiautomator2】之安装步骤

    Mac系统下安装uiaotumator2: 参考网址:<uiautomator2>以及参考github官方文档 注意:下面有坑,如果你没有下面的问题请直接跳转到 1.安装uiaotumat ...

  6. 【学习ATX基于uiautomator2】之API操作Android方法

    具体API可参考:<uiautomator2>以及参考github官方文档 感谢:Ricky_Frog <Python+uiautomator2手机UI自动化测试实战 -- 2. 用 ...

  7. 使用Python实现基于图像识别的iOS自动化测试

    相对于Android来说,iOS比较封闭.这一点,在设计和评估自动化测试方案的时候感觉尤其强烈.iOS平台上没有特别好用的自动化测试工具.苹果针对iOS提供了UI Automation的Instrum ...

  8. 【Python + ATX基于uiaotumator2】之Android—APP自动化简易例子

    上代码: import uiautomator2 as u2 from time import sleep d = u2.connect_usb('608ad0fe') #打开小卖 # d(text= ...

  9. 基于UiAutomator2+PageObject模式开展APP自动化测试实战

    前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...

随机推荐

  1. Java使用POM一JAR包的形式管理JavaScript文件-WebJars

    说明:原来JS框架还可以使用POM进行管理的.WebJars是一个很神奇的东西,可以让大家以JAR包的形式来使用前端的各种框架.组件. 什么是WebJars 什么是WebJars?WebJars是将客 ...

  2. js 鼠标左键拖动滚动

    鼠标左键拖动滚动 原作者: http://blog.csdn.net/lisatisfy/article/details/6606026 本文在源代码的基础上 增加支持水平滚动 的功能 html &l ...

  3. winform如何保持TreeView节点展开和折叠的状态

    转载:http://blog.sina.com.cn/s/blog_6abcacf5010138q5.html private Hashtable NodesStatus = new Hashtabl ...

  4. TSQLDBServerHttpApi使用工作线程池

    TSQLDBServerHttpApi使用工作线程池 TSQLDBServerHttpApi创建时,默认是使用单线程模式,且只使用一个数据库连接,服务端要应对众多的客户端只靠一个工作线程(主线程)和一 ...

  5. 修改nvm镜像地址

    最近几个项目切换开发要求Node版本不一样,没法运行.需要用nvm或n等来管理node版本,选谁见仁见智了,反正我选了nvm. 下载个node慢得要死,等半天结果还失败,真是窝火.官方文档又详细过了一 ...

  6. 如何使用ninja编译系统编译我们的程序?

    使用ninja 配置自己的环境来使用ninja 构建程序 Android使用ninja Windows使用 调试 不使用VS 技巧 问题 Ninja的原意是忍者,忍者神龟的忍者.这里被google拿来 ...

  7. CMD/AMD的原理、区别和应用

    有必要简单提一下两者的主要区别: 1.CMD推崇依赖就近,可以把依赖写进你的代码中的任意一行,例: define(function(require, exports, module) { var a ...

  8. pickle和cPickle:Python对象的序列化(上)

    https://segmentfault.com/a/1190000002493548 pickle模块实现了一种算法,将任意一个Python对象转化成一系列字节(byets).此过程也调用了seri ...

  9. POJ 3083:Children of the Candy Corn(DFS+BFS)

    Children of the Candy Corn Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9311 Accepted: ...

  10. Stack Exchange 的架构

    近日,Stack Exchange系统管理员blog上发布了一篇关于Stack Exchange的架构一瞥,其包括了Stack Overflow, Server Fault 和 Super User的 ...