不说废话上代码:

#!/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. JavaScript对JSON数据进行排序

    var ajson= { "result":[ { "cid":1, "name":"aaa", "price ...

  2. P2P通信标准协议(四)之SIP

    在前面几篇文章中我们介绍了建立p2p通信的一般协议(簇),以及一种完整的NAT传输解决方案ICE, 但是对于多用户的通信情况,还有一些通用协议来实现标准化的管理,如之前讲过的SDP和SIP等,SIP( ...

  3. 使用CSS实现自定义input[checkbox]样式

    思路:使用label上的for熟悉,与checkbox上的id相对应来达到点击选中效果,在使用伪元素,或者其他元素,定位至checkbox上方,替代checkbox,并且隐藏checkbox,使用CS ...

  4. 笔记:git基本操作

    原文: http://www.cnblogs.com/pingwen/p/8098035.html 1. 快速入门的基本概念 相比SVN,TFS等集中式的版本管理系统,GIT分布式管理最重要的理念是本 ...

  5. Android 多线程之IntentService 完全详解

    关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 android多线程-AsyncTask之工作原理深入解析(上) ...

  6. Sql-简单分页

    create proc proc_searchuser( @username varchar(12), @page int=1, @pagesize int=3, @totalcount int ou ...

  7. Keen Team

    Keen Team (碁震安全研究团队,KeenTeam)是一支由在信息安全理论和技术研究方面全球领先的中国“白帽”安全专家组成的信息安全研究队伍,成员主要来自微软的安全漏洞研究.安全攻击和防御技术研 ...

  8. javascriptMVC框架面向对象编程

    //抽象形状类 $.Class("Shape", {}, { //构造函数 init : function(edge) { this.edge = edge; }, //实例方法 ...

  9. 多重采样(MultiSample)下的FBO反锯齿 【转】

    在三维渲染的过程中,锯齿总是让人讨厌的东西.抗锯齿的一种采用方式是多重采样,本文主要小记一下FBO与多重采样的关系.——ZwqXin.com 首先,关于FBO(Frame Buffer Object) ...

  10. 菜鸟调错(五)——jetty执行时无法保存文件

    背景交代: 上一篇博客写的是用jetty和Maven做开发.測试.在使用的过程中遇到一个小问题.就是在jetty启动以后,改动了jsp.xml等文件无法保存. 错误信息: 解决方式: 到Maven库( ...