def __init__(self, driver, device, com, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2): self.device = device self.driver = driver self.Ret1 = Ret1 self.Ret2 = Ret2 #日志 self.loger = logging.getLogger('test_maoyan.sub.module') #多模块使用logging self.image_path = setting.TEST_ERROR_Image # 获取屏幕分辨率 self.screen_x = self.driver.get_window_size()['width'] # 屏幕宽度--单位是px self.screen_y = self.driver.get_window_size()['height'] # 屏幕的高度-单位是px #选择设备 self.ch_device = ChooesDevice(self.device, self.driver) self.wifi_connect = WifiConnect(self.driver, self.device, self.loger, self.screen_x, self.screen_y) # 打印串口 self.port = com self.bps = bps self.timeout = timeout self.start = True # global Ret1 try: # 打开串口,并得到串口对象 self.main_engine = serial.Serial(self.port, self.bps, timeout=self.timeout) self.main_engine.flushInput() # 清空缓冲区 # 判断是否打开成功 if (self.main_engine.is_open): self.Ret1 = True except Exception as e: print("---异常---:", e) # 控制串口 self.port2 = com2 self.bps2 = bps2 self.bytesize = bytesize self.stopbits = stopbits # global Ret2 try: # 打开串口,并得到串口对象 self.main_engine2 = serial.Serial(self.port2, self.bps2, timeout=self.timeout, bytesize=self.bytesize, stopbits=self.stopbits) # 判断是否打开成功 if (self.main_engine2.is_open): self.Ret2 = True # 初始化继电器类 self.relay_h = RelayHandle(self.main_engine2) except Exception as e: print("---异常---:", e)
class H6087MainHandle(): dataList = '' def __init__(self, driver, device, com, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2): self.device = device self.driver = driver self.Ret1 = Ret1 self.Ret2 = Ret2 #日志 self.loger = logging.getLogger( 'H6087MainCase.sub.module') #多模块使用logging # 获取屏幕分辨率 self.screen_x = self.driver.get_window_size()['width'] # 屏幕宽度--单位是px self.screen_y = self.driver.get_window_size()['height'] # 屏幕的高度-单位是px self.swip = Swip(self.screen_x, self.screen_y, self.driver) #选择设备 self.ch_device = ChooesDevice(self.device, self.driver) #打印串口 self.port = com self.bps = bps self.timeout = timeout self.start = True #截图路径 self.image_path = setting.TEST_ERROR_Image # global Ret1 try: # 打开串口,并得到串口对象 self.main_engine = serial.Serial(self.port, self.bps, timeout=self.timeout) self.main_engine.flushInput() # 清空缓冲区 # 判断是否打开成功 if (self.main_engine.is_open): self.Ret1 = True except Exception as e: print("---异常---:", e) #控制串口 self.port2 = com2 self.bps2 = bps2 self.bytesize = bytesize self.stopbits = stopbits # global Ret2 try: # 打开串口,并得到串口对象 self.main_engine2 = serial.Serial(self.port2, self.bps2, timeout=self.timeout, bytesize=self.bytesize, stopbits=self.stopbits) # 判断是否打开成功 if (self.main_engine2.is_open): self.Ret2 = True #初始化继电器类 self.relay_h = RelayHandle(self.main_engine2) except Exception as e: print("---异常---:", e) #设备配网 def connect_H6087(self, skip_wifi, times): if (self.Ret1 and self.Ret2): #功能线程运行 threading.Thread(target=self.add_device, name='add_device', args=( skip_wifi, times, )).start() #日志线程运行 threading.Thread( target=self.recv, name='recvData', ).start() else: print("创建串口失败") #模式切换 def modeChange_H6087(self): if (self.Ret1 and self.Ret2): #功能线程运行 threading.Thread( target=self.mode_change, name='mode_change', ).start() #日志线程运行 threading.Thread( target=self.recv, name='recvData', ).start() else: print("创建串口失败") def mode_change(self): n = 0 #进入设备详情页 try: WebDriverWait( self.driver, 120, 1 ).until(lambda x: x.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device)).is_displayed() except: self.loger.info('没有找到该设备,请先添加设备') else: self.driver.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device).click() #DIY模式切换 WebDriverWait(self.driver, 20, 1).until(lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"DIY\")")).click() #开始DIY模式循环切换 while True: # try: # #DIY-流水 # WebDriverWait(self.driver, 10, 1).until( # lambda x: x.find_element_by_android_uiautomator( # "new UiSelector().text(\"流水\")")).click() # self.loger.info('切换流水diy模式') # print('切换流水diy模式') # sleep(3) # # 关机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备关机') # print('物理按键,控制设备关机') # sleep(3) # # 开机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备开机') # print('物理按键,控制设备开机') # # # DIY-灿烂 # WebDriverWait(self.driver, 10, 1).until( # lambda x: x.find_element_by_android_uiautomator( # "new UiSelector().text(\"灿烂\")")).click() # self.loger.info('切换灿烂diy模式') # print('切换灿烂diy模式') # sleep(3) # # 关机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备关机') # print('物理按键,控制设备关机') # sleep(3) # # 开机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备开机') # print('物理按键,控制设备开机') # # # DIY-四季 # WebDriverWait(self.driver, 10, 1).until( # lambda x: x.find_element_by_android_uiautomator( # "new UiSelector().text(\"四季\")")).click() # self.loger.info('切换四季diy模式') # print('切换四季diy模式') # sleep(3) # # 关机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备关机') # print('物理按键,控制设备关机') # sleep(3) # # 开机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备开机') # print('物理按键,控制设备开机') # # # DIY-摇摆 # WebDriverWait(self.driver, 10, 1).until( # lambda x: x.find_element_by_android_uiautomator( # "new UiSelector().text(\"摇摆\")")).click() # self.loger.info('切换摇摆diy模式') # print('切换摇摆diy模式') # sleep(3) # # 关机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备关机') # print('物理按键,控制设备关机') # sleep(3) # # 开机 # self.relay_h.once_click() # self.loger.info('物理按键,控制设备开机') # print('物理按键,控制设备开机') # # n += 1 # self.loger.info('第[%s]循环次切换DIY模式结束' % n) # print('第[%s]循环次切换DIY模式结束' % n) # except Exception as e: # self.loger.info(e) # self.loger.info('DIY模式切换失败') # print('DIY模式切换失败') try: # 音乐模式 try: WebDriverWait(self.driver, 60, 0.2).until( EC.element_to_be_clickable((By.ID, 'mode_1_icon'))) except: self.loger.info('蓝牙连接失败') self.screenshot('蓝牙连接失败') self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")").click() else: WebDriverWait(self.driver, 10).until( lambda x: x.find_element_by_id("mode_1_icon")).click() if self.check_ble_status(): self.loger.info('切换音乐模式后,蓝牙连接正常') sleep(2) self.loger.info('再次物理点击颜色按键') self.relay_h.once_click() else: self.loger.info('切换音乐模式后,蓝牙断连') self.screenshot('切换音乐模式后,蓝牙断连') WebDriverWait(self.driver, 60, 0.5).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")")).click() sleep(3) # 颜色模式 try: WebDriverWait(self.driver, 60, 0.2).until( EC.element_to_be_clickable((By.ID, 'mode_2_icon'))) except: self.loger.info('蓝牙连接失败') self.screenshot('蓝牙连接失败') self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")").click() else: WebDriverWait(self.driver, 10).until( lambda x: x.find_element_by_id("mode_2_icon")).click() if self.check_ble_status(): self.loger.info('切换颜色模式后,蓝牙连接正常') sleep(2) self.loger.info('再次物理点击颜色按键') self.relay_h.once_click() else: self.loger.info('切换颜色模式后,蓝牙断连') self.screenshot('切换颜色模式后,蓝牙断连') WebDriverWait(self.driver, 60, 0.5).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")")).click() sleep(3) # 场景模式 try: WebDriverWait(self.driver, 60, 0.2).until( EC.element_to_be_clickable((By.ID, 'mode_3_icon'))) except: self.loger.info('蓝牙连接失败') self.screenshot('蓝牙连接失败') self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")").click() else: WebDriverWait(self.driver, 10).until( lambda x: x.find_element_by_id("mode_3_icon")).click() if self.check_ble_status(): self.loger.info('切换场景模式后,蓝牙连接正常') sleep(2) self.loger.info('再次物理点击颜色按键') self.relay_h.once_click() else: self.loger.info('切换场景模式后,蓝牙断连') self.screenshot('切换场景模式后,蓝牙断连') WebDriverWait(self.driver, 60, 0.5).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")")).click() # DIY模式 sleep(3) try: WebDriverWait(self.driver, 60, 0.2).until( EC.element_to_be_clickable((By.ID, 'mode_4_icon'))) except: self.loger.info('蓝牙连接失败') self.screenshot('蓝牙连接失败') self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")").click() else: WebDriverWait(self.driver, 10).until( lambda x: x.find_element_by_id("mode_4_icon")).click() if self.check_ble_status(): self.loger.info('切换DIY模式后,蓝牙连接正常') # self.loger.info('----------------------------------') sleep(2) self.loger.info('再次物理点击颜色按键') self.relay_h.once_click() else: self.loger.info('切换DIY模式后,蓝牙断连') self.screenshot('切换DIY模式后,蓝牙断连') WebDriverWait(self.driver, 60, 0.5).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")")).click() except Exception as e: self.loger.info(e) self.loger.info('模式切换失败') print('模式切换失败') #检查蓝牙状态 def check_ble_status(self): try: WebDriverWait( self.driver, 5, 0.5).until(lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"已连接\")")).is_displayed() except: return False else: return True #设备配网 #1、次数 2、是否跳过WiFi设置 def add_device(self, skip_wifi, times): result = [0, 0] m = 0 app_check = False com_check = False for i in range(times): # 选择设备类型 try: self.ch_device.chooes_device() m += 1 # 扫描蓝牙 while True: try: WebDriverWait(self.driver, 120, 1).until( lambda x: x.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device) ).is_displayed() except: self.loger.info('蓝牙扫描失败,重新扫描') self.screenshot('蓝牙扫描失败') try: WebDriverWait( self.driver, 60, 1).until(lambda x: x. find_element_by_android_uiautomator( "new UiSelector().text(\"重新扫描\")") ).is_displayed() except: self.loger.info('重新扫描按钮不可点击') else: self.loger.info('点击重新扫描按钮') self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"重新扫描\")").click() else: self.loger.info('蓝牙扫描成功') sleep(3) ele = self.driver.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device) sleep(1) ele.click() break # 进入配对界面,点击设备开关按键 try: WebDriverWait(self.driver, 60, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"配对\")")).is_displayed() except: self.loger.info('进入蓝牙配对界面失败') # 蓝牙没有连接成功时,重新连接,直到成功 while True: try: WebDriverWait( self.driver, 10, 1).until(lambda x: x. find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device)).is_displayed() except: self.loger.info('连接成功') break else: self.loger.info('重新连接') self.driver.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device).click() else: self.loger.info('进入蓝牙配对界面成功') result = self.connect_ble_wifi(skip_wifi, result[0], result[1]) except Exception as e: print(e) self.loger.info(e) continue self.start = False self.sum = 0 if skip_wifi: self.sum = int(result[1]) else: self.sum = int(result[0]) print('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % self.sum + ',配网成功率%s' % (self.sum / m * 100) + '%') self.loger.info('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % self.sum + ',配网成功率%s' % (self.sum / m * 100) + '%') def connect_ble_wifi(self, skip_wifi, n, k): result_list = [] # 等待时间 wait_time = random.randint(1, 25) #随机生成一个[1,25]之间的整数,包括1、25 sleep(wait_time) print('等待了%s秒' % wait_time) self.loger.info('等待了%s秒' % wait_time) self.relay_h.once_click() # 蓝牙连接成功,点击完成 try: WebDriverWait( self.driver, 80, 1).until(lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")")).is_displayed() except: self.loger.info('蓝牙配对失败') self.screenshot('蓝牙配对失败') print('蓝牙配对失败') while True: try: WebDriverWait(self.driver, 80, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")")).is_displayed() except: self.loger.info('再次配对') self.driver.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device).click() sleep(2) self.relay_h.once_click() else: self.loger.info('再次配对成功') break else: # 点击完成 self.loger.info('蓝牙配对成功') print('蓝牙配对成功') self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")").click() # 进入WiFi配置界面 try: WebDriverWait( self.driver, 120, 1).until(lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")")).is_displayed() except: self.loger.info('wifi设置页面加载失败,跳过WiFi设置') print('wifi设置页面加载失败,跳过WiFi设置') self.screenshot('wifi设置页面加载失败') # 跳过WiFi设置 self.skip_wifiSetting() #进入设备详情页 # self.enter_gateway_detial() # 删除设备 self.delete_lempDevice() else: # 是否跳过WiFi设置 if skip_wifi: self.loger.info('跳过WiFi设置') print('跳过WiFi设置') # 跳过WiFi设置 self.skip_wifiSetting() k += 1 else: # 判断设备是否添加成功 self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")").click() try: WebDriverWait(self.driver, 180, 0.1).until( EC.presence_of_element_located( (By.XPATH, '//*[contains(@text,"连接成功")]'))) except: print('WiFi连接失败') self.loger.info('WiFi连接失败') self.screenshot('WiFi连接失败') # continue # wifi连接失败时点击跳过 self.skip_wifiSetting() else: n += 1 print('WiFi连接成功') self.loger.info('WiFi连接成功') print('第[%s]次' % n + '配网成功') self.loger.info('第[%s]次' % n + '配网成功') sleep(1) # 点击确定 # self.driver.find_element_by_android_uiautomator("new UiSelector().text(\"确定\")").click() result_list.clear() result_list.append(n) result_list.append(k) # 删除设备 self.delete_lempDevice() return result_list # 删除设备 def delete_lempDevice(self): # btn_settting = self.driver.find_element_by_id("btn_setting") try: WebDriverWait( self.driver, 10).until(lambda x: x.find_element_by_id("btn_setting")) except: print('没有设置按钮') self.loger.info('没有设置按钮') else: sleep(1) self.driver.find_element_by_id("btn_setting").click() sleep(2) # 向下滑动 self.swip.swipe_up(600) self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"删除设备\")").click() sleep(1) yes = self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"是\")") yes.click() sleep(1) print('删除设备') self.loger.info('删除设备') # 刷新首页 self.swip.swipe_down(600) #跳过WiFi设置 def skip_wifiSetting(self): sleep(1) self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"跳过\")").click() sleep(1) self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"确认\")").click() sleep(1) # # 点击确定 # self.driver.find_element_by_android_uiautomator("new UiSelector().text(\"确定\")").click() # 监测蓝牙配对日志 def com_bluetooth_adddevice_log_check(self, dataList): start = len(dataList) - 2500 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 50) # 以冒号进行分割 # 打印串口日志 self.loger.info('配网日志:' + str(strlist)) print('配网日志:' + str(strlist)) sl = '33b200' if str(strlist).find(sl) >= 0: self.loger.info('本次配网日志校验成功') print('本次配网日志校验成功') return True else: print('本次配网日志校验失败') self.loger.info('本次配网日志校验失败') return False #监测蓝牙控制日志 def com_bluetooth_normal_log_check(self, dataList, mlen, option_type, sl=None): start = len(dataList) - mlen end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 50) # 以冒号进行分割 #打印串口日志 self.loger.info('本次操作后蓝牙日志:' + str(strlist)) print('本次操作后蓝牙日志:' + str(strlist)) if option_type == 'mode_switch': for i in range(len(strlist)): sl = strlist[i][len(strlist[i]) - 7:len(strlist[i])] if sl == 'blesend': print('blesend:' + strlist[i + 1]) self.loger.info('蓝牙回复结果:blesend:' + str(strlist[i + 1])) if strlist[i + 1][0] == '3' and strlist[ i + 1][4] == '0' and strlist[i + 1][5] == '0': self.loger.info('本次蓝牙下操作成功') print('本次蓝牙下操作成功') return True else: self.loger.info('本次蓝牙下操作失败') print('本次蓝牙下操作失败') return False else: check = False for i in range(len(strlist)): if str(strlist[i]).find(sl) >= 0: self.loger.info(strlist[i]) print(strlist[i]) check = True break else: check = False return check #监测普通WiFi日志 def com_wifi_normal_log_check(self, dataList, sl, option_type): if option_type == 'on_off_switch': start = len(dataList) - 3400 elif option_type == 'leve_switch': start = len(dataList) - 1400 else: start = len(dataList) - 2200 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 50) # 以冒号进行分割 # 打印串口日志 self.loger.info('本次操作后日志:' + str(strlist)) for i in range(len(strlist)): if strlist[i].find(sl) >= 0: print('串口日志:' + strlist[i]) self.loger.info('串口日志:' + strlist[i]) return strlist[i] # 监测WiFi配网日志 def com_wifi_adddevice_log_check(self, dataList): start = len(dataList) - 8000 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 80) # 以冒号进行分割 # 打印串口日志 self.loger.info('wifi联网日志:' + str(strlist)) print('wifi联网日志:' + str(strlist)) sl = 'IOT_BLE_WIFI_CONNECT_SUC' if str(strlist).find(sl) >= 0: print('本次WiFi连接成功') return True else: print('本次WiFi连接失败') return False # 接收串口数据 def recv(self): if self.start: print("开始接收数据:") else: print("测试完毕,停止接收数据:") while self.start: try: count = self.main_engine.inWaiting() # 获取串口缓冲区数据 if count != 0: data = self.main_engine.read( self.main_engine.in_waiting).decode( "gbk") # 读出串口数据,数据采用gbk编码 # print(time.strftime("%Y-%m-%d %H-%M-%S"), " --- recv --> ") # 打印一下子 time.sleep(0.1) # 延时0.1秒,免得CPU出问题 self.dataList += data data = data.replace("\r", "") self.loger.info(data) except Exception as e: print("异常报错:", e) # 截图 def screenshot(self, msg): # 截图保存 now = time.strftime("%Y-%m-%d %H-%M-%S") image_name = self.image_path + '/' + msg + " " + now + ".png" self.driver.save_screenshot(image_name) # # # if __name__ == '__main__': # platformVersion = '10' #安卓系统版本 # mobileName = 'R58M36MWZ1B' #手机名称 # device = 'H7130_C583' #设备名称 # times = 100 #测试次数 # Ret1 = False #日志打印串口是否创建成功标志 # Ret2 = False #控制串口是否创建成功标志 # com1 = 'com13' # bps = 115200 # timeout = 0.5 # com2 = "com12" # bps2 = 9600 # timex = 0.5 # bytesize = 8 # stopbits = 1 # ms = Humidifier2(platformVersion,mobileName,device,com1, bps, timeout,com2,bps2,bytesize,stopbits) # if(Ret1 and Ret2): # #功能线程运行 # # threading.Thread(target=ms.add_device,args=(times,)).start() # # threading.Thread(target=ms.leve_switch, args=(times,)).start() # threading.Thread(target=ms.on_off_switch, args=(times,)).start() # #日志线程运行 # threading.Thread(target=ms.recv,).start() # # ms.add_device(times) # else: # print("创建串口失败")
class TestMaoYanHandle(object): dataList = '' @classmethod def __init__(self, driver, device, com, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2): self.device = device self.driver = driver self.Ret1 = Ret1 self.Ret2 = Ret2 #日志 self.loger = logging.getLogger('test_maoyan.sub.module') #多模块使用logging self.image_path = setting.TEST_ERROR_Image # 获取屏幕分辨率 self.screen_x = self.driver.get_window_size()['width'] # 屏幕宽度--单位是px self.screen_y = self.driver.get_window_size()['height'] # 屏幕的高度-单位是px #选择设备 self.ch_device = ChooesDevice(self.device, self.driver) self.wifi_connect = WifiConnect(self.driver, self.device, self.loger, self.screen_x, self.screen_y) # 打印串口 self.port = com self.bps = bps self.timeout = timeout self.start = True # global Ret1 try: # 打开串口,并得到串口对象 self.main_engine = serial.Serial(self.port, self.bps, timeout=self.timeout) self.main_engine.flushInput() # 清空缓冲区 # 判断是否打开成功 if (self.main_engine.is_open): self.Ret1 = True except Exception as e: print("---异常---:", e) # 控制串口 self.port2 = com2 self.bps2 = bps2 self.bytesize = bytesize self.stopbits = stopbits # global Ret2 try: # 打开串口,并得到串口对象 self.main_engine2 = serial.Serial(self.port2, self.bps2, timeout=self.timeout, bytesize=self.bytesize, stopbits=self.stopbits) # 判断是否打开成功 if (self.main_engine2.is_open): self.Ret2 = True # 初始化继电器类 self.relay_h = RelayHandle(self.main_engine2) except Exception as e: print("---异常---:", e) #设备配网 def connect_device(self, skip_wifi, times): if (self.Ret1 and self.Ret2): self.add_device(skip_wifi, times) else: print("创建串口失败") # 设备配网 # 1、次数 2、是否跳过WiFi设置 def add_device(self, skip_wifi, times): ble_scan_device = BleScanConnect(self.driver, self.device, self.loger, self.relay_h) # 扫描设备 result = [0, 0] m = 0 app_check = False com_check = False for i in range(times): try: # 选择设备类型 self.ch_device.chooes_device() m += 1 #扫描蓝牙并连接 ble_scan_device.ble_scan_connect() result = self.wifi_connect.wifi_connect( skip_wifi, result[0], result[1]) except Exception as e: print(e) self.loger.info(e) continue self.start = False self.sum = 0 if skip_wifi: self.sum = int(result[1]) else: self.sum = int(result[0]) print('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % self.sum + ',配网成功率%s' % (self.sum / m * 100) + '%') self.loger.info('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % self.sum + ',配网成功率%s' % (self.sum / m * 100) + '%') # 截图 def screenshot(self, msg): # 截图保存 now = time.strftime("%Y-%m-%d %H-%M-%S") image_name = self.image_path + '/' + msg + " " + now + ".png" self.driver.save_screenshot(image_name) # 接收串口数据 def recv(self): if self.start: print("开始接收数据:") else: print("测试完毕,停止接收数据:") while self.start: try: count = self.main_engine.inWaiting() # 获取串口缓冲区数据 if count != 0: data = self.main_engine.read( self.main_engine.in_waiting).decode( "gbk") # 读出串口数据,数据采用gbk编码 # print(time.strftime("%Y-%m-%d %H-%M-%S"), " --- recv --> ") # 打印一下子 time.sleep(0.1) # 延时0.1秒,免得CPU出问题 self.dataList += data except Exception as e: print("异常报错:", e)
class H6058MainHandle(): dataList = '' def __init__(self,driver,device, com, bps, timeout,com2,bps2,bytesize,stopbits,Ret1,Ret2): self.device = device self.driver = driver self.Ret1 = Ret1 self.Ret2 = Ret2 #日志 self.loger = logging.getLogger('H6058MainCase.sub.module') #多模块使用logging # 获取屏幕分辨率 self.screen_x = self.driver.get_window_size()['width'] # 屏幕宽度--单位是px self.screen_y = self.driver.get_window_size()['height'] # 屏幕的高度-单位是px #选择设备 self.ch_device = ChooesDevice(self.device,self.driver) self.wifi_connect = WifiConnect(self.driver, self.device, self.loger,self.screen_x,self.screen_y) #打印串口 self.port = com self.bps = bps self.timeout = timeout self.start = True # global Ret1 try: # 打开串口,并得到串口对象 self.main_engine = serial.Serial(self.port, self.bps, timeout=self.timeout) self.main_engine.flushInput() # 清空缓冲区 # 判断是否打开成功 if (self.main_engine.is_open): self.Ret1 = True except Exception as e: print("---异常---:", e) #控制串口 self.port2 = com2 self.bps2 = bps2 self.bytesize = bytesize self.stopbits = stopbits # global Ret2 try: # 打开串口,并得到串口对象 self.main_engine2= serial.Serial(self.port2,self.bps2,timeout=self.timeout,bytesize=self.bytesize,stopbits=self.stopbits) # 判断是否打开成功 if (self.main_engine2.is_open): self.Ret2 = True #初始化继电器类 self.relay_h = RelayHandle(self.main_engine2) except Exception as e: print("---异常---:", e) #设备配网 def connect_H6058(self,skip_wifi,times): if(self.Ret1 and self.Ret2): #功能线程运行 threading.Thread(target=self.add_device,name= 'add_device', args=(skip_wifi,times,)).start() #日志线程运行 threading.Thread(target=self.recv,name= 'recvData',).start() else: print("创建串口失败") #模式切换 def modeChange_H6058(self): if(self.Ret1 and self.Ret2): #功能线程运行 threading.Thread(target=self.mode_change,name= 'mode_change',).start() #日志线程运行 threading.Thread(target=self.recv,name= 'recvData',).start() else: print("创建串口失败") def mode_change(self): n = 0 #进入设备详情页 try: WebDriverWait(self.driver, 120, 1).until( lambda x: x.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device)).is_displayed() except: self.loger.info('没有找到该设备,请先添加设备') else: self.driver.find_element_by_android_uiautomator('new UiSelector().text(\"%s\")' % self.device).click() #DIY模式切换 WebDriverWait(self.driver, 20, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"DIY\")")).click() #开始DIY模式循环切换 while True: try: #DIY-流水 WebDriverWait(self.driver, 10, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"流水\")")).click() self.loger.info('切换流水diy模式') print('切换流水diy模式') sleep(3) # 关机 self.relay_h.once_click() self.loger.info('物理按键,控制设备关机') print('物理按键,控制设备关机') sleep(3) # 开机 self.relay_h.once_click() self.loger.info('物理按键,控制设备开机') print('物理按键,控制设备开机') # DIY-灿烂 WebDriverWait(self.driver, 10, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"灿烂\")")).click() self.loger.info('切换灿烂diy模式') print('切换灿烂diy模式') sleep(3) # 关机 self.relay_h.once_click() self.loger.info('物理按键,控制设备关机') print('物理按键,控制设备关机') sleep(3) # 开机 self.relay_h.once_click() self.loger.info('物理按键,控制设备开机') print('物理按键,控制设备开机') # DIY-四季 WebDriverWait(self.driver, 10, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"四季\")")).click() self.loger.info('切换四季diy模式') print('切换四季diy模式') sleep(3) # 关机 self.relay_h.once_click() self.loger.info('物理按键,控制设备关机') print('物理按键,控制设备关机') sleep(3) # 开机 self.relay_h.once_click() self.loger.info('物理按键,控制设备开机') print('物理按键,控制设备开机') # DIY-摇摆 WebDriverWait(self.driver, 10, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"摇摆\")")).click() self.loger.info('切换摇摆diy模式') print('切换摇摆diy模式') sleep(3) # 关机 self.relay_h.once_click() self.loger.info('物理按键,控制设备关机') print('物理按键,控制设备关机') sleep(3) # 开机 self.relay_h.once_click() self.loger.info('物理按键,控制设备开机') print('物理按键,控制设备开机') n += 1 self.loger.info('第[%s]循环次切换DIY模式结束' % n) print('第[%s]循环次切换DIY模式结束' % n) except Exception as e: self.loger.info(e) self.loger.info('DIY模式切换失败') print('DIY模式切换失败') #设备配网 #1、次数 2、是否跳过WiFi设置 def add_device(self,skip_wifi,times): # 扫描设备 ble_scan_device = BleScanConnect(self.driver, self.device, self.loger,self.relay_h) result = [0,0] m = 0 app_check = False com_check = False for i in range(times): try: # 选择设备类型 self.ch_device.chooes_device() m += 1 #扫描蓝牙并连接 ble_scan_device.ble_scan_connect() result = self.wifi_connect.wifi_connect(skip_wifi,result[0],result[1]) except Exception as e: print(e) self.loger.info(e) continue self.start = False self.sum = 0 if skip_wifi: self.sum = int(result[1]) else: self.sum = int(result[0]) print('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % self.sum + ',配网成功率%s' % (self.sum / m * 100) + '%') self.loger.info('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % self.sum + ',配网成功率%s' % (self.sum / m * 100) + '%') # 监测蓝牙配对日志 def com_bluetooth_adddevice_log_check(self, dataList): start = len(dataList) - 2500 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 50) # 以冒号进行分割 # 打印串口日志 self.loger.info('配网日志:' + str(strlist)) print('配网日志:' + str(strlist)) sl = '33b200' if str(strlist).find(sl) >= 0: self.loger.info('本次配网日志校验成功') print('本次配网日志校验成功') return True else: print('本次配网日志校验失败') self.loger.info('本次配网日志校验失败') return False #监测蓝牙控制日志 def com_bluetooth_normal_log_check(self,dataList,mlen,option_type,sl=None): start = len(dataList) - mlen end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 50) # 以冒号进行分割 #打印串口日志 self.loger.info('本次操作后蓝牙日志:'+str(strlist)) print('本次操作后蓝牙日志:'+str(strlist)) if option_type == 'mode_switch': for i in range(len(strlist)): sl = strlist[i][len(strlist[i]) - 7:len(strlist[i])] if sl == 'blesend': print('blesend:' + strlist[i + 1]) self.loger.info('蓝牙回复结果:blesend:' + str(strlist[i + 1])) if strlist[i+1][0] == '3' and strlist[i+1][4] == '0' and strlist[i+1][5] == '0': self.loger.info('本次蓝牙下操作成功') print('本次蓝牙下操作成功') return True else: self.loger.info('本次蓝牙下操作失败') print('本次蓝牙下操作失败') return False else : check = False for i in range(len(strlist)): if str(strlist[i]).find(sl) >= 0: self.loger.info(strlist[i]) print(strlist[i]) check = True break else: check = False return check #监测普通WiFi日志 def com_wifi_normal_log_check(self, dataList, sl, option_type): if option_type == 'on_off_switch': start = len(dataList) - 3400 elif option_type == 'leve_switch': start = len(dataList) - 1400 else: start = len(dataList) - 2200 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 50) # 以冒号进行分割 # 打印串口日志 self.loger.info('本次操作后日志:' + str(strlist)) for i in range(len(strlist)): if strlist[i].find(sl) >= 0: print('串口日志:' + strlist[i]) self.loger.info('串口日志:' + strlist[i]) return strlist[i] # 监测WiFi配网日志 def com_wifi_adddevice_log_check(self, dataList): start = len(dataList) - 8000 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 80) # 以冒号进行分割 # 打印串口日志 self.loger.info('wifi联网日志:' + str(strlist)) print('wifi联网日志:' + str(strlist)) sl = 'IOT_BLE_WIFI_CONNECT_SUC' if str(strlist).find(sl) >= 0: print('本次WiFi连接成功') return True else: print('本次WiFi连接失败') return False # 接收串口数据 def recv(self): if self.start: print("开始接收数据:") else: print("测试完毕,停止接收数据:") while self.start: try: count = self.main_engine.inWaiting() # 获取串口缓冲区数据 if count != 0: data = self.main_engine.read(self.main_engine.in_waiting).decode("gbk") # 读出串口数据,数据采用gbk编码 # print(time.strftime("%Y-%m-%d %H-%M-%S"), " --- recv --> ") # 打印一下子 time.sleep(0.1) # 延时0.1秒,免得CPU出问题 self.dataList += data data = data.replace("\r", "") self.loger.info(data) except Exception as e: print("异常报错:", e)