def open_project(self, projectname): """打开工程""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.系统[0], screen_point.系统[1]) m1.click(self.BECivilWin, '', screen_point.打开工程[0], screen_point.打开工程[1]) sleep(3) w1 = WinControl("选择工程") if w1.exists(): w1.wait(3) w1.setState(3) # 输入名字搜索 m1.click("选择工程", '', 50, 35) autoit.send(projectname) sleep(5) # 打开测试脚本用土建工程 m1.click(self.BECivilWin, '', 92, 133, clicks=3) else: raise Exception("未选中选择工程窗口") sleep(10) # 使视图视角变为俯视视角 m1.click(self.BECivilWin, '', 440, 440, button='right') m1.click(self.BECivilWin, '', 490, 475) else: raise Exception("未识别BECivil窗口")
def upload_project(self, projectname): """上传工程""" w0 = WinControl(self.BECivilWin) if w0.exists(): m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.系统[0], screen_point.系统[1]) m1.click(self.BECivilWin, '', screen_point.上传工程[0], screen_point.上传工程[1]) w1 = WinControl("打开") sleep(4) if w1.exists(): w1.wait(3) w1.setState(3) # 输入保存上传工程的地址 m1.click('打开', '', 820, 45) w1.controlSetText('[CLASS:Edit; INSTANCE:2]', self.uploadaddress) autoit.send("{ENTER}") sleep(2) w1.controlSetText('[CLASS:Edit; INSTANCE:1]', projectname) w1.controlClick('[CLASS:Button; INSTANCE:1]') sleep(2) w2 = WinControl("上传工程") sleep(2) if w2.exists(): w2.wait(3) w2.controlClick('[CLASS:Button; INSTANCE:3]') sleep(3) w3 = WinControl("上传位置") if w3.exists(): w3.wait(3) # 选择IM测试 m1.click(self.BECivilWin, '', 940, 435) sleep(1) w3.controlClick("[CLASS:Button; INSTANCE:1]") else: raise Exception('未选中上传位置窗口') sleep(1) w2.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception('未选中上传工程窗口') else: raise Exception('未选中打开窗口') sleep(22) w5 = WinControl("Luban Explorer(Civil)提醒您") w5.wait(60) if w5.exists(): pass else: raise Exception("上传成功提示未显示") else: raise Exception("未识别BECivil窗口")
def state_statistics(self): """状态统计""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.沙盘[0], screen_point.沙盘[1]) m1.click(self.BECivilWin, '', screen_point.状态统计[0], screen_point.状态统计[1]) sleep(2) w0.controlClick("[CLASS:Button; INSTANCE:24]") sleep(2) w0.controlClick("[CLASS:Button; INSTANCE:25]") sleep(3) w1 = WinControl("另存为") if w1.exists(): w1.wait(3) w1.setState(3) m1.click('另存为', '', 1060, 50) autoit.send(self.downloadaddress) autoit.send("{ENTER}") sleep(2) w1.controlClick("[CLASS:Button; INSTANCE:1]") sleep(1) w2 = WinControl("确认另存为") if w2.exists(): w2.wait(3) w2.controlClick("[CLASS:Button; INSTANCE:1]") else: pass sleep(35) if w0.exists(): w0.wait(3) t = w0.getPos() if t == (832, 438, 1088, 602): pass else: raise Exception('Something went wrong.') w0.controlClick("[CLASS:Button; INSTANCE:2]") else: raise Exception("未能打开另存为窗口") else: raise Exception("未识别BECivil窗口")
def start_IM(self): """启动IM""" if WinControl(self.BECivilWin).exists(): m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.资料[0], screen_point.资料[1]) sleep(1) m1.click(self.BECivilWin, '', screen_point.质检计量[0], screen_point.质检计量[1]) # 等待IM界面 w1 = WinControl(self.IMWin) w1.wait(30) # 关闭筑业升级进程 if autoit.process_exists("ZY.Downloader.exe"): autoit.process_close("ZY.Downloader.exe") else: pass w1.setState(3) else: print('BECivil未启动,无法启动IM。')
def start_BECivli(self): """登录BECivil""" # 判断屏幕分辨率是否为1920*1080 if verifySystemMetrics(1920, 1080) == True: pass else: raise Exception("分辨率不为1920*1080,请更改分辨率") # 判断Shell、BECivil和IM是否存在,若存在则退出 processes = [ ProcessControl(self.IMProcess), ProcessControl(self.BECivilProcess), ProcessControl(self.ShellProcess) ] for process in processes: if process.exists(): process.close() # 启动软件以及登录 try: autoit.run(self.path) except Exception as e: print(e) print('软件安装路径有误,或者软件安装路径中有中文,\nstart_APP函数中path变量前需要加r!') else: w1 = WinControl('用户登录') w1.wait() if w1.exists(): w1.controlSetText('[CLASS:Edit; INSTANCE:1]', self.username) w1.controlSetText('[CLASS:Edit; INSTANCE:2]', self.password) w1.controlSetText('[CLASS:Edit; INSTANCE:3]', self.ip) w1.controlClick('Button1') # 等待BECivil界面 w2 = WinControl(self.BECivilWin) w2.wait(25) w2.setState(3) sleep(1) """
def open_working_set(self): """打开工作集""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.系统[0], screen_point.系统[1]) m1.click(self.BECivilWin, '', screen_point.打开工作集[0], screen_point.打开工作集[1]) sleep(3) w1 = WinControl('打开工作集') if w1.exists(): w1.setState(3) w1.controlSetText('[CLASS:Edit; INSTANCE:1]', '测试脚本用创建工作集') sleep(3) # 打开工作集,因为有时候双击会出现打不开的情况,故设置点击数为3 m1.click('打开工作集', '', 92, 134, clicks=3) else: raise Exception("未选中打开工作集窗口") else: raise Exception("未识别BECivil窗口")
def local_task(self): """本地任务""" w0 = WinControl(self.BECivilWin) if w0.exists(): m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.系统[0], screen_point.系统[1]) m1.click(self.BECivilWin, '', screen_point.本地任务[0], screen_point.本地任务[1]) w1 = WinControl(" 本机处理任务") if w1.exists(): w1.wait(3) w1.setState(3) # 历史记录 m1.click(" 本机处理任务", '', 85, 30) # 删除此次上传的两条记录 for i in range(2): m1.click(" 本机处理任务", '', 50, 90) w1.controlClick('Button1') if w0.exists(): w0.waitActive(3) # 识别确定删除窗口关联的进程ID t = w0.getPos() if t == (845, 438, 1075, 602): pass else: raise Exception("未成功删除该任务") sleep(1) w0.controlClick('Button1') sleep(1) else: raise Exception("未成功删除该任务") sleep(1) # 关闭本机处理任务 m1.click(" 本机处理任务", '', 1905, 5) else: raise Exception("未选中本机任务窗口") else: raise Exception("未识别BECivil窗口")
def cooperation_management(self): """协作管理""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.协作[0], screen_point.协作[1]) m1.click(self.BECivilWin, '', screen_point.协作管理[0], screen_point.协作管理[1]) sleep(15) w1 = WinControl('Luban Cooperation') if w1.exists(): w1.wait(3) w1.setState(3) sleep(2) # 确认协作已删除 m1.click('Luban Cooperation', '', 960, 575) sleep(1) # 关闭CO m1.click('Luban Cooperation', '', 1882, 29) else: raise Exception("未能打开鲁班协作窗口") # 从后台关闭CO sleep(3) ps = [ ProcessControl(self.COProcess), ProcessControl(self.SuspernsionCtrlProcess) ] for p in ps: if p.exists(): p.wait(6) p.close() else: print('未找到运行的鲁班协作程序') else: raise Exception("未识别BECivil窗口")
def start_BECivil(self): """登录BECivil""" # 判断屏幕分辨率是否为1920*1080 if verifySystemMetrics(1920, 1080) == True: pass else: raise Exception("分辨率不为1920*1080,请更改分辨率") sleep(5) # 初始化登录环境 processes = [ ProcessControl(self.IMProcess), ProcessControl(self.BECivilProcess), ProcessControl(self.ShellProcess) ] for process in processes: if process.exists(): process.close() else: pass sleep(2) # 启动软件以及登录 try: autoit.run(self.path) except Exception as e: print(e) print('软件安装路径有误,或者软件安装路径中有中文,\nstart_APP函数中path变量前需要加r!') else: sleep(3) w1 = WinControl('用户登录') if w1.exists(): w1.wait() w1.controlSetText('[CLASS:Edit; INSTANCE:1]', self.username) w1.controlSetText('[CLASS:Edit; INSTANCE:2]', self.password) w1.controlSetText('[CLASS:Edit; INSTANCE:3]', self.ip) w1.controlClick('Button1') sleep(20) # 如果检测到升级则进行升级过程,若没有则pass w2 = WinControl("Luban Explorer(Civil)版本获取") if w2.exists(): w2.wait(60) print('>>>>>>>>检测到LubanBECivil正在升级') sleep(60) else: pass print('软件未升级') sleep(3) # 等待BECivil界面 w3 = WinControl(self.BECivilWin) w3.wait(60) if w3.exists(): #w3.wait(60) sleep(5) w4 = WinControl('启动提示') if w4.exists(): w4.wait(3) w4.controlClick('[CLASS:Button; INSTANCE:1]') print('软件弹出了启动提示') else: pass w3.wait(60) w3.setState(3) sleep(15) else: raise Exception("未识别BECivil打开的窗口") # 检测CO进程并退出 ps = [ ProcessControl(self.COProcess), ProcessControl(self.SuspernsionCtrlProcess) ] for p in ps: if p.exists(): p.wait(6) p.close() else: print("未启动鲁班协作") else: raise Exception("未打开用户登录窗口")
def upload_information(self): """上传资料""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.资料[0], screen_point.资料[1]) m1.click(self.BECivilWin, '', screen_point.上传资料[0], screen_point.上传资料[1]) w1 = WinControl('上传资料') sleep(3) if w1.exists(): w1.wait(3) w1.setState(3) ''' # 因删除上传资料的文件夹在BECivil上是有bug的,服务器说要等到下个版本发版的时候再改,所以新增删除文件夹这一块暂时注掉 m1.click('上传资料', '', 40, 90, button='right') sleep(1) m1.click('上传资料', '', 100, 105) m1.click('上传资料', '', 40, 90)# 点击全部 sleep(1) w1.controlClick('[CLASS:Button; INSTANCE:9]') sleep(1) w2 = WinControl('文件夹新建') if w2.exists(): w2.wait(3) w2.controlSetText('[CLASS:Edit; INSTANCE:1]', '测试脚本用上传文件夹') sleep(1) w2.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception("未打开新建文件夹窗口") ''' # 点击新建文件夹 m1.click('上传资料', '', 60, 110) sleep(1) w1.controlClick('[CLASS:Button; INSTANCE:11]') sleep(3) w3 = WinControl('授权人员') if w3.exists(): w3.wait(3) w3.controlSetText('[CLASS:Edit; INSTANCE:1]', 'xushenwei') w3.controlClick('[CLASS:Button; INSTANCE:5]') sleep(1) # 勾选授权人员 m1.click('授权人员', '', 870, 420) w3.controlClick('[CLASS:Button; INSTANCE:2]') else: raise Exception("未打开授权人员窗口") sleep(1) # 本地资料 w1.controlClick('[CLASS:Button; INSTANCE:14]') sleep(2) w4 = WinControl('打开') if w4.exists(): w4.wait(3) w4.setState(3) m1.click('打开', '', 970, 50) w4.controlSetText('[CLASS:Edit; INSTANCE:2]', self.uploadaddress) autoit.send("{ENTER}") w4.controlSetText('[CLASS:Edit; INSTANCE:1]', r'上传测试资料.txt') sleep(2) w4.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception("上传资料未成功") sleep(4) # 关联 m1.click('上传资料', '', 1800, 110) sleep(2) w5 = WinControl(' 设置资料信息') if w5.exists(): w5.wait(3) # 点击标签 m1.click(' 设置资料信息', '', 840, 260) w5.controlSetText('[CLASS:ListBox; INSTANCE:1]', '测试脚本用标签') w5.controlClick('[CLASS:Button; INSTANCE:14]') m1.click(' 设置资料信息', '', 790, 335) sleep(1) w5.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception("未打开关联资料窗口") # 查看 m1.click('上传资料', '', 1840, 110) sleep(2) w6 = WinControl('上传测试资料.txt - 记事本') if w6.exists(): w6.wait(3) w6.setState(3) sleep(1) m1.click('上传测试资料.txt - 记事本', '', 1890, 10) else: raise Exception('未打开上传的资料') ''' m1.click('上传资料', '', 1880, 110) sleep(1) if w0.exists(): w0.wait(3) w0.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception("未成功删除上传资料") ''' # 关闭上传资料窗口 m1.click('上传资料', '', 1905, 10) else: raise Exception("未打开上传资料窗口") else: raise Exception('未识别BECivil窗口')
def information_management(self): """资料管理""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.资料[0], screen_point.资料[1]) m1.click(self.BECivilWin, '', screen_point.资料管理[0], screen_point.资料管理[1]) w1 = WinControl('资料管理') sleep(3) if w1.exists(): w1.wait(3) w1.setState(3) # 关联 m1.click('资料管理', '', 1695, 160) sleep(1) w2 = WinControl(' 设置资料信息') if w2.exists(): w2.wait(3) w2.controlClick('[CLASS:Button; INSTANCE:6]') m1.click(' 设置资料信息', '', 805, 440) sleep(2) w2.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception('未打开设置资料信息窗口') sleep(2) w1.setState(3) # 反查 m1.click('资料管理', '', 1785, 160) sleep(1) if w0.exists(): w0.wait(3) t1 = w0.getPos() if t1 == (0, 0, 1920, 1040): pass else: raise Exception('Something went wrong.') sleep(2) # 退出反查 m1.click(self.BECivilWin, '', 1100, 490, button='right') sleep(0.5) m1.click(self.BECivilWin, '', 1170, 505) sleep(2) if w1.exists(): w1.wait(3) w1.setState(3) else: raise Exception('退出反查失败') else: raise Exception('反查失败') sleep(2) # 下载 m1.click('资料管理', '', 1835, 160) sleep(2) w3 = WinControl('另存为') if w3.exists(): w3.wait(3) m1.click('另存为', '', 1030, 45) w3.controlSetText('[CLASS:Edit; INSTANCE:2]', self.downloadaddress) sleep(1) w3.controlClick('[CLASS:Button; INSTANCE:1]') sleep(1) w4 = WinControl('确认另存为') if w4.exists(): w4.wait(3) w4.controlClick('[CLASS:Button; INSTANCE:1]') else: pass else: raise Exception('未打开另存为窗口') # 勾选上传资料 m1.click('资料管理', '', 425, 160) sleep(1) # 关联 w1.controlClick('[CLASS:Button; INSTANCE:6]') sleep(1) if w2.exists(): w2.wait(3) w2.controlClick('[CLASS:Button; INSTANCE:3]') sleep(2) w2.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception('未打开设置资料信息窗口') sleep(3) w1.setState(3) # 勾选上传资料 m1.click('资料管理', '', 425, 160) # 打印 w1.controlClick('[CLASS:Button; INSTANCE:7]') sleep(1) w5 = WinControl('打印') if w5.exists(): w5.wait(3) w5.controlClick('[CLASS:Button; INSTANCE:14]') else: raise Exception('未打开打印窗口') sleep(3) w1.setState(3) # 删除 w1.controlClick('[CLASS:Button; INSTANCE:8]') sleep(2) if w0.exists(): w0.wait(3) t2 = w0.getPos() if t2 == (844, 438, 1076, 602): pass else: raise Exception('Something went wrong.') w0.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception('删除未成功') sleep(3) w1.setState(3) # 关闭资料管理窗口 m1.click('资料管理', '', 1905, 10) else: raise Exception('未打开资料管理窗口') else: raise Exception('未识别BECivil窗口')
def viewing_reports(self): """查看报表""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.数据[0], screen_point.数据[1]) m1.click(self.BECivilWin, '', screen_point.查看报表[0], screen_point.查看报表[1]) sleep(2) w1 = WinControl('报表(Civil)') if w1.exists(): w1.wait(3) # 条件统计 m1.click('报表(Civil)', '', 40, 70) sleep(1) w2 = WinControl('条件统计') if w2.exists(): w2.wait(3) # 勾选全部楼层 m1.click('条件统计', '', 740, 410) sleep(1) # 勾选全部构件 m1.click('条件统计', '', 975, 410) sleep(1) w2.controlClick("[CLASS:Button; INSTANCE:1]") else: raise Exception("未打开条件统计窗口") # 选中构件 m1.click('报表(Civil)', '', 860, 260, clicks=2) # 点击反查 m1.click('报表(Civil)', '', 100, 70) sleep(2) w3 = WinControl('反查结果') if w3.exists(): w3.wait(3) sleep(2) w3.controlClick('[CLASS:Button; INSTANCE:3]') else: raise Exception("未打开反查结果窗口") sleep(1) # 打印预览 m1.click('报表(Civil)', '', 290, 70) sleep(2) w4 = WinControl('打印预览 - 你的报表标题') if w4.exists(): w4.wait(3) # 退出打印预览 m1.click('打印预览 - 你的报表标题', '', 1890, 10) else: raise Exception('未打开打印预览窗口') sleep(2) # 导出Excel m1.click('报表(Civil)', '', 360, 70) sleep(2) w5 = WinControl('另存为') if w5.exists(): w5.wait(3) w5.setState(3) m1.click('另存为', '', 860, 45) w5.controlSetText('[CLASS:Edit; INSTANCE:2]', self.downloadaddress) autoit.send("{ENTER}") sleep(2) w5.controlClick('[CLASS:Button; INSTANCE:1]') sleep(2) w6 = WinControl('确认另存为') if w6.exists(): w6.wait(3) w6.controlClick('[CLASS:Button; INSTANCE:1]') else: pass else: raise Exception("未打开另存为窗口") sleep(15) w7 = WinControl('测试脚本用安装工程.YS_清单定额汇总表.xls [兼容模式] - Excel') if w7.exists(): w7.wait(3) w7.setState(3) sleep(3) # 关闭自动打开的Excel m1.click('测试脚本用安装工程.YS_清单定额汇总表.xls [兼容模式] - Excel', '', 1905, 12) else: raise Exception("未打开Excel") sleep(2) # 导出PDF m1.click('报表(Civil)', '', 435, 70) sleep(2) w8 = WinControl('另存为') if w8.exists(): w8.wait(3) w8.setState(3) m1.click('另存为', '', 860, 45) w8.controlSetText('[CLASS:Edit; INSTANCE:2]', self.downloadaddress) autoit.send("{ENTER}") sleep(2) w5.controlClick('[CLASS:Button; INSTANCE:1]') sleep(2) w9 = WinControl('确认另存为') if w9.exists(): w9.wait(3) w9.controlClick('[CLASS:Button; INSTANCE:1]') else: pass else: raise Exception("未打开另存为窗口") sleep(7) w10 = WinControl( '你的报表标题 - 测试脚本用安装工程.YS_清单定额汇总表.pdf - Mozilla Firefox') if w10.exists(): w10.wait(3) w10.setState(3) sleep(3) # 关闭自动打开的Excel m1.click( '你的报表标题 - 测试脚本用安装工程.YS_清单定额汇总表.pdf - Mozilla Firefox', '', 1893, 7) sleep(2) w11 = WinControl("确认关闭") if w11.exists(): w11.wait(3) autoit.send("{ENTER}") else: raise Exception("未打开PDF") sleep(1) # 报表管理 m1.click('报表(Civil)', '', 500, 70) sleep(2) w12 = WinControl('报表管理') if w12.exists(): w12.wait(3) w12.controlClick('[CLASS:Button; INSTANCE:4]') sleep(2) w13 = WinControl('打开') if w13.exists(): w13.wait(3) m1.click('打开', '', 1030, 45) w13.controlSetText('[CLASS:Edit; INSTANCE:2]', self.uploadaddress) sleep(1) autoit.send("{ENTER}") w13.controlSetText('[CLASS:Edit; INSTANCE:1]', '测试脚本用上传报表.xlsx') sleep(1) w13.controlClick("[CLASS:Button; INSTANCE:1]") sleep(5) w14 = WinControl('上传报表') if w14.exists(): w14.wait(3) w14.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception('未打开上传报表窗口') else: raise Exception("未打开打开窗口") # 关闭报表管理 m1.click('报表管理', '', 1314, 243) sleep(2) else: raise Exception('未打开报表管理窗口') # 关闭报表窗口 m1.click('报表(Civil)', '', 1895, 5) else: raise Exception('未打开报表(Civil)窗口') else: raise Exception('未识别BECivil窗口')
def node_management(self): """节点管理""" w0 = WinControl(self.BECivilWin) if w0.exists(): w0.wait(3) m1 = MouseControl() m1.click(self.BECivilWin, '', screen_point.操作[0], screen_point.操作[1]) m1.click(self.BECivilWin, '', screen_point.节点管理[0], screen_point.节点管理[1]) w1 = WinControl('节点管理') sleep(1) if w1.exists(): w1.wait(3) w1.setState(3) # 点击预览 m1.click('节点管理', '', 1510, 100) sleep(2) w2 = WinControl('预览窗口 ') if w2.exists(): w2.wait(3) w2.setState(3) # 关闭预览窗口 m1.click('预览窗口 ', '', 1910, 10) else: raise Exception('未打开预览窗口') sleep(2) # 点击编辑 m1.click('节点管理', '', 1550, 100) sleep(2) w3 = WinControl('编辑节点') if w3.exists(): w3.wait(3) # 点击节点名称 m1.click('编辑节点', '', 970, 390, clicks=2) autoit.send('新建1') # 更改图钉颜色 m1.click('编辑节点', '', 970, 425) sleep(0.5) m1.click('编辑节点', '', 970, 490) sleep(1) # 添加节点备注 m1.click('编辑节点', '', 970, 520) autoit.send('备注123') sleep(1) w3.controlClick("[CLASS:Button; INSTANCE:1]") sleep(2) if w0.exists(): w0.wait(3) t1 = w0.getPos() if t1 == (862, 438, 1058, 602): pass else: raise Exception('Something went wrong.') w0.controlClick('[CLASS:Button; INSTANCE:1]') else: raise Exception("未成功编辑节点") else: raise Exception('未打开编辑节点窗口') # 点击删除 m1.click('节点管理', '', 1630, 100) sleep(1) if w0.exists(): w0.wait(3) t2 = w0.getPos() if t2 == (845, 438, 1075, 602): pass else: raise Exception('Something went wrong.') w0.controlClick("[CLASS:Button; INSTANCE:1]") else: raise Exception('未成功删除节点') sleep(1) # 关闭节点管理窗口 m1.click('节点管理', '', 1910, 10) else: raise Exception('未打开节点管理窗口') else: raise Exception('未识别BECivil窗口')