def _swipe(self, ui1: Union[Picture,Coordinate,PocoUi],ui2:Union[Picture,Coordinate] = None, direction:tuple=None, focus:tuple=None,duration=0.5,**kw): ''' 根据指定的点或者方向进行滑动 :param ui1: 滑动起始坐标、图像 :param ui2: 滑动结束坐标、图像 :param direction: 滑动方向 :param duration: 滑动时长 :return: ''' nowUiTree = self._get_ui_tree() if self.__last_tree == nowUiTree: return True #校验参数 self.__para_check(ui1,[Picture,Coordinate,PocoUi]) self.__para_check(ui2,[Picture,Coordinate]) #同时都为图片 self.__last_tree = self._get_ui_tree() if type(ui1)==Picture and type(ui2)==Picture: swipe(ui1.getTemplate(),ui2.getTemplate(),direction,duration,**kw) #同时都为坐标 elif type(ui1)==Coordinate and type(ui2)==Coordinate: if g().isThePootUsed(): g().activePoot.swipe(ui1.x,ui1.y,ui2.x,ui2.y,int(duration)) else: g().activePoco.swipe((ui1.x,ui1.y),(ui2.x,ui2.y),direction,duration) #ui1为poco,方向不为空时 elif type(ui1)==PocoUi and direction!=None: u1=self.__poco(ui1.info) u1.swipe(direction,focus,duration) else: raise BaseException("不支持的类型组合操作")
def fawordmailsuccess(self, assertDict=None): self._click(g().get_resource_infor('转发')) self._text('*****@*****.**') self._click(g().get_resource_infor('点击邮件内容')) self._text('转发邮件') self._click(g().get_resource_infor('发送')) self._performAssert('打开邮件有更多按钮', assertDict)
def enterLoginPage(self): ''' :return:登录页 ''' #关闭天府手机银行 self._stopTFBank() #运行天府手机银行 self._startTFBank() #等待【主界面】出现 time.sleep(3) self._wait_ui_appear(g().get_resource_infor("手机银行首页定位按钮")) #手机银行首页 #self._click(g().get_resource_infor('手机银行主导航界面我的按钮'),focus=(0.8, 0.5)) # 点击 我的跳到登录页面 time.sleep(3) #self._wait_ui_appear(g().get_resource_infor("手机银行主导航界面我的按钮")) #self._click(g().get_resource_infor('手机银行首页退出按钮')) self._click((0.909, 2063 / 2244)) loginUi = g().get_resource_infor('登录页面手机号') # 未登录-有手机号 welcomeLoginUi = g().get_resource_infor("登录页面欢迎回来") # 未登录-欢迎回来 appearUi = self._wait_multiple_ui_appear([loginUi, welcomeLoginUi]) if appearUi == loginUi: self._click(g().get_resource_infor("登录页面更多登录按钮")) # 点击 更多登录 按钮 self._click(g().get_resource_infor("登录页面切换账户按钮")) # 点击 切换账户 #如果是欢迎登录页面,则直接返回登录页面 return Login()
def selectall(self, assertDict=None): self._click(g().get_resource_infor('编辑')) self._wait_ui_appear(g().get_resource_infor('全选')) self._click(g().get_resource_infor('全选')) self._performAssert('断言出现取消全选', assertDict) self._click(g().get_resource_infor('取消全选')) self._performAssert('断言出现全选', assertDict)
def canceldelaccount(self, assertDict=None): self._click(g().get_resource_infor('菜单栏')) self._click(g().get_resource_infor('设置')) self._click(g().get_resource_infor('账号')) self._click(g().get_resource_infor('删除账号')) self._click(g().get_resource_infor('取消')) self._performAssert('删除账号', assertDict)
def writemail(self, sendTo, subject, content, assertDict=None): self._click(g().get_resource_infor('收件人')) self._text(sendTo) self._click(g().get_resource_infor('主题')) self._text(subject) self._click(g().get_resource_infor('邮件内容')) self._text(content)
def _cancelTips(self): ''' 点击弹窗取消按钮,如果有 :return: ''' if self._exists(g().get_resource_infor('弹窗消息取消按钮')): self._click(g().get_resource_infor('弹窗消息取消按钮'))
def _confirmTips(self): ''' 点击弹窗确定按钮,如果有 :return: ''' if self._exists(g().get_resource_infor('弹窗消息确定按钮')): self._click(g().get_resource_infor('弹窗消息确定按钮'))
def _drag(self,ui1:Union[PocoUi,Picture,PootUi],ui2:Union[PocoUi,Picture,PootUi],ui1focus:tuple=None,ui2focus:tuple=None,duration=2): ''' 从ui1拖动至ui2,支持图像和poco :param ui1: :param ui2: :param ui1focus: :param ui2focus: :param duration: :return: ''' #校验参数 self.__para_check(ui2, [PocoUi,Picture,PootUi]) #坐标 if type(ui1)==PocoUi and type(ui2)==PocoUi: u1=self.__poco(ui1.info) self.__set_focus(u1,ui1focus) u2 = self.__poco(ui2.info) self.__set_focus(u2, ui2focus) u1.drag_to(u2, duration) elif type(ui1)==Picture and type(ui2)==Picture: swipe(ui1.getTemplate(),ui2.getTemplate()) elif type(ui1)==PootUi and type(ui2)==PootUi: ui1x,ui1y=self.__poot(ui1.info).get_focus_x_y(ui1focus) ui2x,ui2y=self.__poot(ui2.info).get_focus_x_y(ui2focus) g().activePoot.swipe(ui1x,ui1y,ui2x,ui2y,duration) else: raise BaseException("不支持的类型组合操作")
def addOfficalDocumentApproval(self, assertDict): ''' :param assertDict: :return: 处理待办公文加签审批人员 ''' # 点击公文 self._click(g().get_resource_infor('公文按钮')) # 点击要处理的公文 self._click(g().get_resource_infor('要加签的公文')) # 点击处理 self._click(g().get_resource_infor('公文处理按钮')) self._wait_ui_appear(g().get_resource_infor('公文菜单栏')) self._wait_ui_appear( g().get_resource_infor('加签按钮'), lambda ui: ui._click(g().get_resource_infor('公文菜单栏'), focus=(0.7, 0.5))) # 点击加签 self._click(g().get_resource_infor('加签按钮')) # 点击加签人员 self._click(g().get_resource_infor('联系人ui_test2')) # 点击确认 self._click(g().get_resource_infor('公文确认按钮')) self._performAssert('断言处理待办公文加签审批人员成功', assertDict) # 点击完成 self._click(g().get_resource_infor('完成按钮')) self._click_back() self._click_back()
def transferYiBanXieTong(self,assertDict): ''' :param asserDict: :return: 转发已办协同 ''' # 滑动界面出现批量操作 if not self._exists(g().get_resource_infor('批量操作按钮')): self._swipe((0.6, 0.3), (0.6, 0.5)) # 点击批量操作 self._click(g().get_resource_infor('批量操作按钮')) # 点击全选 self._click(g().get_resource_infor('全选按钮')) # 点击转发 self._click(g().get_resource_infor('转发按钮')) # 点击转发输入框 self._click(g().get_resource_infor('转发输入框')) self._text('ui_test2') # 选择接收人 self._click(g().get_resource_infor('接收人ui_test2')) # 点击选择接收人删除图标 self._click(g().get_resource_infor('接收人删除图标')) # 点击附言输入框 # self._click(g().get_resource_infor('附言输入框')) # self._text('测试转发协同') # 点击发送 self._click(g().get_resource_infor('转发协同发送按钮')) self._wait_ui_appear(g().get_resource_infor('协同待办按钮')) # 点击已发 self._click(g().get_resource_infor('协同已发按钮')) self._performAssert('断言转发已办协同成功',assertDict)
def endXieTong(self, assertDict): ''' :param assertDict: :return: 终止待办协同 ''' # 点击待办 self._click(g().get_resource_infor('协同待办按钮')) # 点击要处理的协同 self._click(g().get_resource_infor('已发送协同')) # 点击处理 self._click(g().get_resource_infor('协同处理按钮')) # 点击协同菜单栏 self._click(g().get_resource_infor('协同菜单栏')) self._wait_ui_appear( g().get_resource_infor('终止按钮'), lambda ui: ui._click(g().get_resource_infor('协同菜单栏'))) # 点击回退 self._click(g().get_resource_infor('终止按钮')) # 点击确定 self._click(g().get_resource_infor('协同确定按钮')) # 点击已办 self._click(g().get_resource_infor('协同已办按钮')) self._performAssert('断言终止待办协同成功', assertDict) # 点击已发 self._click(g().get_resource_infor('协同已发按钮'))
def _inputPwdForLatter(self, text, done: bool = True): ''' 天府银行密码键盘输入:字母键盘 :param text:待输入的字符,英文字符、数字、{c}、{d},其中{d}:代表退格键,{c}:代表完成键 :param done:指示是否自动点击完成按钮,默认自动点击 :return: ''' if g().activeDevType == "IOS": #针对ios if not self._exists(g().get_picture('字符转换按钮.png')): #数字 for i in text: self._click(g().get_resource_infor("按键", keys=i)) else: #字母数字键盘 for i in text: self._click(g().get_resource_infor("按键", keys=i)) else: #对键入值进行处理 keyList = tools.textProgress(text) size = self._get_screen_size() while keyList: self.__keyboardClick(size, 2, keyList.pop()) if done: self.__keyboardClick(size, 2, "{c}")
def test(self): # 指定测试数据集 g().group = '商城测试案例002' # 构造数据 userName = g().get_test_data("用户名") vagueUserName = g().get_test_data("模糊用户名") loginPwd = g().get_test_data("密码") goodName = g().get_test_data("商品名称") # 构造断言数据 assertDict1 = { "断言登录成功": ''' #登录成功断言 self.assert_ui_exists(g().get_resource_infor('我的页面设置按钮'),"断言登录成功") ''', "断言搜索商品成功": ''' #断言搜索商品是否成功 self.assert_ui_exists(g().get_resource_infor('搜索有结果'),"断言搜索商品成功") ''' } #运行流程 log('登录手机银行') Login().login(userName, vagueUserName, loginPwd) Mall().searchGoods(goodName, assertDict=assertDict2) #搜索商城商品
def addpic(self, assertDict=None): self._click(g().get_resource_infor('添加图片')) self._click(g().get_resource_infor('拍照片')) time.sleep(3.0) self._click(g().get_resource_infor('拍照')) self._wait_ui_appear(g().get_resource_infor('拍照确定')) self._click(g().get_resource_infor('拍照确定'))
def _inputSmsCheckCode(self, error: bool = False): ''' 短信验证码输入(针对已自动填充的短信验证码输入,将删除最后一位并重新填写) :param error:指示是否输入错误 :return: ''' done = True # 等待请输入短信验证码出现 self._wait_ui_appear(g().get_resource_infor('请输入短信验证码文本框')) # 判断存在的短信验证码是哪一个ui if self._exists(g().get_resource_infor('验证码输入框')): checkCodeUi = g().get_resource_infor('验证码输入框') done = False elif self._exists(g().get_resource_infor('U盾认证页短信验证码输入框')): checkCodeUi = g().get_resource_infor('U盾认证页短信验证码输入框') else: raise BaseException("未在当前界面找到对应的短信验证码控件") checkCode = self._get_text(checkCodeUi) # 提取验证码的最后一位 checkCode = checkCode[-1:] #如果错误标志为真 if error: #todo:记得过来修改这里 checkCode = int(checkCode) + 1 # 验证码重新输入并提交 self._inputPwdForNumber("{d}%s" % checkCode, done)
def revokeSendXieTong(self,reason,revokeType): ''' :return: 撤销已发送协同 ''' # 点击协同已发 self._click(g().get_resource_infor('协同已发按钮')) # 点击发送的协同 if revokeType=='test': self._click(g().get_resource_infor('已发送协同')) elif revokeType=="oa系统业务申请表": self._click(g().get_resource_infor('已发送表单协同')) elif revokeType=='test(由ui_test1原发)': self._click(g().get_resource_infor('转发的协同')) elif revokeType=='test2': self._click(g().get_resource_infor('已发送第二个协同')) # 点击撤销 self._click(g().get_resource_infor('撤销按钮')) # 点击撤销原因输入框 self._click(g().get_resource_infor('撤销原因输入框')) self._text(reason) # 点击确定 self._click(g().get_resource_infor('确定按钮')) # 点击确认撤销 self._click(g().get_resource_infor('撤销确定按钮')) self._wait_ui_appear(g().get_resource_infor('协同已发按钮'))
def saveXieTong(self,assertDict=None): ''' :param assertDict: :return: 协同保存待发 ''' # 点击协同 self._click(g().get_resource_infor('OA首页协同按钮')) # 点击+号新建协同 self._click(g().get_resource_infor('协同页搜索图标'), focus=(0.8, 0.5)) # 点击表单模板 self._click(g().get_resource_infor('表单模板按钮')) # 点击全部模板 self._click(g().get_resource_infor('全部模板按钮')) # 点击行政审批 self._click(g().get_resource_infor('行政审批按钮')) # 点击OA系统业务申请表 self._click(g().get_resource_infor('OA系统业务申请表')) # 点击关闭 self._click(g().get_resource_infor('关闭按钮')) # 点击保存到待发 self._click(g().get_resource_infor('保存到待发按钮')) self._wait_ui_appear(g().get_resource_infor('协同待办按钮')) # 点击待发 self._click(g().get_resource_infor('协同待发按钮')) self._performAssert('断言协同保存待发成功',assertDict)
def test(self): # 指定登录数据集 g().group = '商城测试案例003' # 构造数据 userName = g().get_test_data("用户名") vagueUserName = g().get_test_data("模糊用户名") loginPwd = g().get_test_data("密码") goodName = g().get_test_data("商品名称") # 构造断言数据 assertDict = { "去逛逛页面跳转成功": ''' #断言去逛逛页面跳转成功 self.assert_ui_exists(g().get_resource_infor('商品详情页加入购物车按钮'),"断言去逛逛页面跳转成功") ''' } #运行流程 log('登录手机银行') Login().login(userName, vagueUserName, loginPwd) time.sleep(2) Mall().getIntoGoodsDetail(goodName, assertDict=assertDict) #搜索商城商品并进入商品详情页面 time.sleep(2) Mall().checkMessageInGoodsDetail(assertDict=assertDict) #检验商品详情页面消息按钮 time.sleep(2) Mall().checkSearchInGoodsDetail(assertDict=assertDict) #检验商品详情页面搜索按钮 time.sleep(2) Mall().checkHomepageInGoodsDetail(assertDict=assertDict) #检验商品详情页面首页按钮
def save(reportInfor): ''' 将报告信息放置到报告列表 :param reportInfor: :return: ''' g().report_list.append(reportInfor)
def canceldelmessage(self, assertDict=None): ''' :return:进入工作圈页面 ''' self._click(g().get_resource_infor('删除按钮')) self._click(g().get_resource_infor('取消')) self._performAssert('删除按钮',assertDict)
def addtasktopic(self,topicname,assertDict=None): self._click(g().get_resource_infor('添加话题')) self._wait_ui_appear(g().get_resource_infor('新建话题')) self._click(g().get_resource_infor('新建话题')) self._text(topicname) self._click(g().get_resource_infor('确定')) self._performAssert('保存', assertDict)
def setActiveDev(self,devName:str): ''' 切换活动设备,此方法全局只需要调用一次 :param devName: :return: ''' g().setActiveDev(devName)
def delwork(self, assertDict=None): self._click(g().get_resource_infor('所有')) self._click(g().get_resource_infor('成员按钮')) time.sleep(3) self._click(g().get_resource_infor('删除工作圈')) self._click(g().get_resource_infor('确定')) self._performAssert('发布按钮', assertDict)
def delworkmember(self, assertDict=None): self._click(g().get_resource_infor('所有')) self._click(g().get_resource_infor('成员按钮')) time.sleep(3) self._click(g().get_resource_infor('删除成员按钮')) self._click(g().get_resource_infor('删除成员')) self._performAssert('加入工作圈人数2人', assertDict)
def _get_screen_size(self): ''' 获得屏幕尺寸 :return: ''' if g().isThePootUsed(): return g().activePoot.get_screen_size() return g().activePoco.get_screen_size()
def addpicture(self): self._click(g().get_resource_infor('拍照按钮')) time.sleep(3.0) self._click(g().get_resource_infor('拍照片')) time.sleep(3.0) self._click(g().get_resource_infor('拍照')) self._wait_ui_appear(g().get_resource_infor('拍照确定')) self._click(g().get_resource_infor('拍照确定'))
def postmessage(self, assertDict=None): #self._wait_ui_disapper(g().get_resource_infor('图片发送中')) self._click(g().get_resource_infor('发送')) if self._exists(g().get_resource_infor('提示')): self._click(g().get_resource_infor('确定')) time.sleep(3) self._performAssert('回到工作圈页面', assertDict) self._performAssert('失败停留在当前页面', assertDict)
def inputmessage(self,content,assertDict=None): ''' :return:进入工作圈页面 ''' self._click(g().get_resource_infor('发布按钮')) self._click(g().get_resource_infor('发布消息')) self._click(g().get_resource_infor('文档输入框')) self._set_text(g().get_resource_infor('文档输入框'),content)
def workname(self, name,assertDict=None): self._click(g().get_resource_infor('所有')) self._click(g().get_resource_infor('创建工作圈')) self._click(g().get_resource_infor('输入框')) self._text(name) self._click(g().get_resource_infor('确定')) #self._click(g().get_resource_infor('确定创建')) self._performAssert('不合法的工作圈名称', assertDict)