class H6087MainCase(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.device_name = [ 'H6087_1D6F', ] # 日志 self.user_log = UserLog(self.device_name[0]) self.loger = self.user_log.get_logger() Ret1 = False #日志打印串口是否创建成功标志 Ret2 = False #控制串口是否创建成功标志 com1 = 'com6' bps = 115200 timeout = 0.5 com2 = "com12" bps2 = 9600 bytesize = 8 stopbits = 1 self.h6087Main_h = H6087MainHandle(self.driver, self.device_name[0], com1, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2) #前置条件 def setUp(self) -> None: print('开始测试') #配网 @unittest.skip('配网不执行') def test_1_connect_device(self): #是否跳过WiFi设置 skip_wifi = True #测试次数 times = 1000 try: self.h6087Main_h.connect_H6087(skip_wifi, times) except Exception as e: print(e) self.loger.info(e) def test_2_modeChange(self): try: self.h6087Main_h.modeChange_H6087() except Exception as e: print(e) self.loger.info(e)
class H616BMainCase(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.user_log = UserLog('H616B') self.logger = self.user_log.get_logger() self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.screen_x = self.coon.get_screen_x() self.screen_y = self.coon.get_screen_y() #设备名称 self.device_name = ['H616B_5E80', 'H616B_2D64'] self.h616BMain_h = H616BMainHandle(self.driver, self.screen_x, self.screen_y,self.logger,self.device_name[1]) #前置条件 def setUp(self) -> None: print('开始测试') # @unittest.skip('不执行') def test_ota(self): self.h616BMain_h.enter_H616B_main_face() times = 100 n = 0 for i in range(times): ota_result = self.h616BMain_h.ota() if ota_result: n += 1 self.logger.info('第[%s]次OTA成功'%(i+1)) print('第[%s]次OTA成功'%(i+1)) else: self.logger.info('第[%s]次OTA失败'%(i+1)) print('第[%s]次OTA失败'%(i+1)) print('OTA升级[%s]次'%times+',成功了[%s]次!!!!!!!!' % n) self.logger.info('OTA升级[%s]次'%times+',成功了[%s]次!!!!!!!!' % n) # 后置条件 def tearDown(self): # for method_name, error in self._outcome.errors: # if error: # case_name = self._testMethodName # now = time.strftime("%Y-%m-%d %H-%M-%S") # image_name = setting.TEST_ERROR_Image + '/' + case_name + " " + now + ".png" # self.driver.save_screenshot(image_name) # self.driver.close() print("测试结束")
class Test5151Class(object): @classmethod def setup_class(self): self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.device_name = [ 'H5151_5F82', ] # 日志 self.user_log = UserLog(self.device_name[0]) self.loger = self.user_log.get_logger() Ret1 = False # 日志打印串口是否创建成功标志 Ret2 = False # 控制串口是否创建成功标志 com1 = 'com3' bps = 115200 timeout = 0.5 com2 = "com5" bps2 = 9600 bytesize = 8 stopbits = 1 self.h5151Main_h = H5151MainHandle(self.driver, self.device_name[0], com1, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2, self.loger) def setup_method(self): print("\n开始测试") @pytest.mark.run(order=1) def test_connect_device(self): #是否跳过WiFi设置 skip_wifi = False #测试次数 times = 200 try: self.h5151Main_h.connect_H5151(skip_wifi, times) except Exception as e: print(e) self.loger.info(e) @pytest.mark.skip(reason='misunderstood the API') def test_ota(self): print('方法2')
class H5183MainCase(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.device_name = [ 'H5181', ] # 日志 self.user_log = UserLog(self.device_name[0]) self.loger = self.user_log.get_logger() Ret1 = False #日志打印串口是否创建成功标志 Ret2 = False #控制串口是否创建成功标志 com1 = 'com6' bps = 115200 timeout = 0.5 com2 = "com30" bps2 = 9600 bytesize = 8 stopbits = 1 self.h5183Main_h = H5183MainHandle(self.driver, self.device_name[0], com1, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2) #前置条件 def setUp(self) -> None: print('开始测试') # @unittest.skip('不执行') #ota def test_1_ota(self): #测试次数 times = 2000 try: self.h5183Main_h.ota(times) except Exception as e: print(e) self.loger.info(e) pass
class BleStabilityMainCase(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.device_name = ['H5183', ] # 日志 self.user_log = UserLog(self.device_name[0]) self.loger = self.user_log.get_logger() self.bsm_h = BleStabilityHandle(self.driver,self.device_name[0]) #前置条件 def setUp(self) -> None: print('开始测试') def test_bleConnect(self): # 测试次数 times = 1000 try: self.bsm_h.bleconnect(times) except Exception as e: print(e)
class Thermo_HygrometerBoundClass(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.coon = ConnectMobile() self.driver = self.coon.get_driver() # 测试次数 self.times = 3 self.thermo_hygrometer_list = ['H5052_AC1C', 'H5051_6C7A', '5100'] self.device_name = ['H7101_8027', 'H7111_F229'] # 日志 self.user_log = UserLog(self.device_name[0]) self.loger = self.user_log.get_logger() self.thb_h = Thermo_HygrometerBoundHandle(self.driver, self.loger) #前置条件 def setUp(self) -> None: print('开始测试') # @pytest.mark.run(order=1) def test_bound_device(self): try: self.thb_h.bound(self.device_name[0], self.times, self.thermo_hygrometer_list) except Exception as e: print(e) self.loger.info(e) @unittest.skip('不执行') def test_bound_device2(self): try: # for i in range(len(self.device_name)): # # self.thb_h.bound_thermo_hygrometer(self.device_name[i],self.times,self.thermo_hygrometer_list) self.thb_h.bound(self.device_name[1], self.times, self.thermo_hygrometer_list) except Exception as e: print(e) self.loger.info(e)
# -*- coding:utf-8 -*- import pytest import time from selenium import webdriver from _pytest import terminal from log.user_log import UserLog # 定义driver driver = webdriver.Chrome() # 定义日志 log = UserLog() logger = log.get_logger() # 定义测试结果 test_result_summary = {} @pytest.mark.hookwrapper def pytest_runtest_makereport(item): """ 当测试失败的时候,自动截图,展示到html报告中 ** 作者:上海-悠悠 QQ交流群:588402570** :param item: """ pytest_html = item.config.pluginmanager.getplugin('html') outcome = yield report = outcome.get_result() extra = getattr(report, 'extra', []) if report.when == 'call' or report.when == "setup":
class DeviceConnectCase(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.user_log = UserLog() self.logger = self.user_log.get_logger() self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.screen_x = self.coon.get_screen_x() self.screen_y = self.coon.get_screen_y() self.deviceConnect_h = DeviceConnectHandle(self.driver, self.screen_x, self.screen_y, self.logger) self.device_name = ['H6199_1540', 'H6199_1B2F'] @classmethod def tearDownClass(self) -> None: self.user_log.close_file_handler() #前置条件 def setUp(self) -> None: # self.adb_log.write_log() pass @unittest.skip("不执行") def test_connect_H5102(self): self.deviceConnect_h.connect_H5102() self.logger.info("---------连接H5102") #断言:对结果进行判断 #self.assertTrue() @unittest.skip("不执行") def test_connect_H5103(self): self.deviceConnect_h.connect_H5103() self.logger.info("---------连接H5103") # 断言:对结果进行判断 # self.assertTrue() @unittest.skip('不执行') def test_connect_H5182(self): self.deviceConnect_h.delete_H5182() self.logger.info("---------连接H5102") #断言:对结果进行判断 #self.assertTrue() @unittest.skip('不执行') def test_connect_H5183(self): self.deviceConnect_h.connect_H5183() def test_connect_H6199(self): n = 0 times = 500 for i in range(times): try: connect = self.deviceConnect_h.connect_H6199( self.device_name[1]) if connect: n += 1 self.logger.info('第[%s]次添加设备成功' % (i + 1)) else: self.logger.info('第[%s]次添加设备失败' % (i + 1)) except Exception as e: self.logger.info(e) print('添加[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n) self.logger.info('添加[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n) @unittest.skip('不执行') def test_connect_H6056(self): n = 0 for i in range(5): try: connect = self.deviceConnect_h.connect_sku6056() if connect: n += 1 self.logger.info('添加设备成功') else: self.logger.info('添加设备失败') except Exception as e: self.logger.info(e) print('添加5次,成功了[%s]次!!!!!!!!' % n) self.logger.info('添加5次,成功了[%s]次!!!!!!!!' % n) @unittest.skip('不执行') def test_connect_H6054(self): n = 0 for i in range(5): try: connect = self.deviceConnect_h.connect_H6054() if connect: n += 1 self.logger.info('第[%s]次添加设备成功' % (i + 1)) else: self.logger.info('第[%s]次添加设备失败' % (i + 1)) except Exception as e: self.logger.info(e) print('添加5次,成功了[%s]次!!!!!!!!' % n) self.logger.info('添加5次,成功了[%s]次!!!!!!!!' % n) #后置条件 def tearDown(self): for method_name, error in self._outcome.errors: if error: case_name = self._testMethodName now = time.strftime("%Y-%m-%d %H-%M-%S") image_name = setting.TEST_ERROR_Image + '/' + case_name + " " + now + ".png" self.driver.save_screenshot(image_name) # self.driver.close() print("测试结束")
class H7130MainHandle(): dataList = '' def __init__(self, driver, device, com, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2): self.device = device #日志 self.user_log = UserLog(self.device) self.loger = self.user_log.get_logger() self.driver = driver self.Ret1 = Ret1 self.Ret2 = Ret2 # 获取屏幕分辨率 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.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 except Exception as e: print("---异常---:", e) def connect_H7130(self, times): if (self.Ret1 and self.Ret2): #功能线程运行 threading.Thread(target=self.add_device, args=(times, )).start() # threading.Thread(target=self.leve_switch, args=(times,)).start() # threading.Thread(target=self.on_off_switch, args=(times,)).start() #日志线程运行 threading.Thread(target=self.recv, ).start() else: print("创建串口失败") # 选择要添加的设备类型 def chooes_device(self): sleep(4) # 点击+号 # ele = self.driver.find_element_by_xpath('//android.widget.ImageView[2]') ele = self.driver.find_element_by_id('iv_add') sleep(2) ele.click() sleep(3) self.loger.info('开始添加设备') # 点击搜索 WebDriverWait(self.driver, 30, 1).until(EC.element_to_be_clickable( (By.ID, 'tv_search'))).click() sleep(2) # 切换输入法,方便后续调用输入法的搜索按钮 self.driver.activate_ime_engine( 'com.sec.android.inputmethod/.SamsungKeypad') # 搜索框输入device_type self.driver.press_keycode(14) sleep(0.5) self.driver.press_keycode(8) sleep(0.5) self.driver.press_keycode(10) sleep(0.5) self.driver.press_keycode(7) WebDriverWait(self.driver, 30, 1).until(EC.element_to_be_clickable( (By.ID, 'sku_icon'))).click() #设备配网 def add_device(self, times): n = 0 #成功次数 m = 0 #配网执行次数 k = 0 #WiFi列表加载失败次数 app_check = False com_check = False for i in range(times): #选择设备类型 try: self.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('进入蓝牙配对界面失败') else: sleep(2) self.once_click() # 蓝牙连接成功,点击完成 try: WebDriverWait(self.driver, 120, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")")).is_displayed( ) except: self.loger.info('蓝牙配对失败') self.screenshot('蓝牙配对失败') # 校验串口日志 self.com_bluetooth_log_check(self.dataList) else: # 校验串口日志 check_result = self.com_bluetooth_log_check( self.dataList) if check_result: self.loger.info('串口蓝牙日志校验成功') # 点击完成 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() WebDriverWait(self.driver, 120, 1).until( lambda x: x. find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")" )).is_clickable() except: self.loger.info('wifi设置页面加载失败') self.screenshot('wifi设置页面加载失败') k += 1 self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"跳过\")").click() sleep(2) self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"确认\")").click() #删除设备 self.delete_lempDevice() else: self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")").click() # 校验串口日志,等4秒 sleep(4) check_result_2 = self.com_wifi_log_check( self.dataList) # 判断设备是否配网成功 # try: # WebDriverWait(self.driver, 120, 1).until( # EC.element_to_be_clickable((By.ID, 'iv_switch'))) try: WebDriverWait(self.driver, 180, 0.1).until( EC.presence_of_element_located( (By.XPATH, '//*[contains(@text,"连接成功")]'))) except: self.loger.info('APP端Toast提示失败') self.loger.info('设备配网失败') continue else: self.loger.info('APP端Toast提示成功') add_result = True if check_result_2: self.loger.info('串口WiFi日志校验成功') com_check = True else: self.loger.info('串口WiFi日志校验失败') com_check = False if add_result or com_check: n += 1 self.loger.info('设备配网成功') else: self.loger.info('设备配网失败') # 删除设备 self.delete_lempDevice() else: self.loger.info('串口蓝牙日志校验失败') except Exception as e: print(e) continue self.start = False self.loger.info('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % n + ',配网成功率%s' % (n / m * 100) + '%') self.loger.info('wifi设置页面加载失败次数:%s' % k) #删除设备 def delete_lempDevice(self): sleep(4) btn_settting = self.driver.find_element_by_id("btn_setting") sleep(1) btn_settting.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) #刷新首页 self.swip.swipe_down(600) try: WebDriverWait( self.driver, 5, 1 ).until(lambda x: x.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device)).is_displayed() except: self.loger.info('删除设备成功') self.loger.info( '分割线--------------------------------------------------分割线') else: self.loger.info('删除设备失败') #发数据 def Send_data(self, data): self.main_engine2.write(data) #长按4秒 def long_click(self): #发送开 self.Send_data(bytes.fromhex('A0 01 01 A2')) sleep(4) #发送关 self.Send_data(bytes.fromhex('A0 01 00 A1')) #短按 def once_click(self): #发送开 self.Send_data(bytes.fromhex('A0 01 01 A2')) sleep(0.5) #发送关 self.Send_data(bytes.fromhex('A0 01 00 A1')) # 监测串口日志 def com_bluetooth_log_check(self, dataList): start = len(dataList) - 1000 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 20) # 以冒号进行分割 # 打印串口日志 self.loger.info('蓝牙配对日志:' + str(strlist)) print('蓝牙配对日志:' + str(strlist)) sl = 'ble_msg_get_wifi_mac_addressmacstr' if str(strlist).find(sl) >= 0: print('本次蓝牙配对成功') return True else: print('本次蓝牙配对失败') return False # 档位切换日志检测 def com_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] # 监测串口日志 def com_wifi_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 except Exception as e: print("异常报错:", e) # 截图 def screenshot(self, msg): # 截图保存 now = time.strftime("%Y-%m-%d %H-%M-%S") image_name = LOG_DIR + '/' + msg + " " + now + ".png" self.driver.save_screenshot(image_name) # 进入设备详情页 def enter_device(self): 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() # 档位切换 def leve_switch(self, times): # 高档按钮:high_gear_container # 中档按钮:mid_gear_container # 低档按钮:low_gear_container # 进入设备详情页 self.enter_device() try: WebDriverWait(self.driver, 120, 1).until( EC.element_to_be_clickable((By.ID, 'iv_switch'))) except: self.loger.info('设备详情页加载失败') else: self.loger.info('设备详情页加载成功') sleep(5) for i in range(times): try: try: WebDriverWait(self.driver, 30, 1).until( EC.element_to_be_clickable( (By.ID, 'high_gear_container'))) except: print('高档位按钮不可点击') continue else: self.driver.find_element_by_id( 'high_gear_container').click() # 串口校验 sleep(1) result = self.com_log_check(self.dataList, 'AA1002000103', 'leve_switch') if len(result) > 0: self.loger.info('高档位切换成功') print('高档位切换成功') else: self.loger.info('高档位切换失败') print('高档位切换失败') sleep(3) try: WebDriverWait(self.driver, 30, 1).until( EC.element_to_be_clickable( (By.ID, 'mid_gear_container'))) except: print('中档位按钮不可点击') continue else: self.driver.find_element_by_id( 'mid_gear_container').click() sleep(1) result = self.com_log_check(self.dataList, 'AA1002000102', 'leve_switch') if len(result) > 0: self.loger.info('中档位切换成功') print('中档位切换成功') else: self.loger.info('中档位切换失败') print('中档位切换失败') sleep(3) try: WebDriverWait(self.driver, 30, 1).until( EC.element_to_be_clickable( (By.ID, 'low_gear_container'))) except: print('低档位按钮不可点击') continue else: self.driver.find_element_by_id( 'low_gear_container').click() sleep(1) result = self.com_log_check(self.dataList, 'AA1002000101', 'leve_switch') if len(result) > 0: self.loger.info('低档位切换成功') print('低档位切换成功') else: self.loger.info('低档位切换失败') print('低档位切换失败') sleep(3) # 摇头 self.rotate((i + 1) & 1) sleep(2) # 童锁 self.child_lock((i + 1) & 1) sleep(2) # 关闭设备 try: self.on_off_switch() sleep(3) # 开启设备 self.on_off_switch() sleep(3) except Exception as e: print(e) continue print('第%s次循环操作结束' % (i + 1)) self.loger.info('第%s次循环操作结束' % (i + 1)) except Exception as e: print(e) continue # 测试完毕,停止串口打印 self.start = False # 开关切换 def on_off_switch(self, times=None): # # 进入设备详情页 # self.enter_device() # try: # WebDriverWait(self.driver, 120, 1).until( # EC.element_to_be_clickable((By.ID, 'iv_switch'))) # except: # self.loger.info('设备详情页加载失败') # else: # self.loger.info('设备详情页加载成功') # for i in range(times): # 开关按钮:iv_switch try: WebDriverWait( self.driver, 5, 1).until(lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"高档\")")).is_displayed() except: print('设备当前状态是关,打开设备') self.loger.info('设备当前状态是关,打开设备') try: self.driver.find_element_by_id('iv_switch').click() sleep(3) result = self.com_log_check(self.dataList, 'AA1001000101', 'on_off_switch') if len(result) > 0: self.loger.info('设备开成功') print('设备开成功') sleep(3) else: self.loger.info('设备开失败') print('设备开失败') except Exception as e: print(e) # continue else: self.loger.info('设备当前状态是开,关闭设备') print('设备当前状态是开,关闭设备') try: self.driver.find_element_by_id('iv_switch').click() sleep(3) result = self.com_log_check(self.dataList, 'AA1001000100', 'on_off_switch') if len(result) > 0: self.loger.info('设备关成功') print('设备关成功') sleep(3) else: self.loger.info('设备关失败') print('设备关失败') except Exception as e: print(e) # continue # 摇头 def rotate(self, m): # 摇头:iv_rotate if m == 0: try: self.driver.find_element_by_id('iv_rotate').click() sleep(3) result = self.com_log_check(self.dataList, 'AA1003000100', 'rotate') if len(result) > 0: self.loger.info('设备关闭摇头成功') print('设备关闭摇头成功') sleep(3) else: self.loger.info('设备关闭摇头失败') print('设备关闭摇头失败') except Exception as e: print(e) else: try: self.driver.find_element_by_id('iv_rotate').click() sleep(3) result = self.com_log_check(self.dataList, 'AA1003000101', 'rotate') if len(result) > 0: self.loger.info('设备打开摇头成功') print('设备打开摇头成功') sleep(3) else: self.loger.info('设备打开摇头失败') print('设备打开摇头失败') except Exception as e: print(e) # 童锁 def child_lock(self, m): # 童锁按钮:iv_child_lock if m == 0: try: self.driver.find_element_by_id('iv_child_lock').click() sleep(3) result = self.com_log_check(self.dataList, 'AA1005000100', 'child_lock') if len(result) > 0: self.loger.info('设备关闭童锁成功') print('设备关闭童锁成功') sleep(3) else: self.loger.info('设备关闭童锁失败') print('设备关闭童锁失败') except Exception as e: print(e) else: try: self.driver.find_element_by_id('iv_child_lock').click() sleep(3) result = self.com_log_check(self.dataList, 'AA1005000101', 'child_lock') if len(result) > 0: self.loger.info('设备打开童锁成功') print('设备打开童锁成功') sleep(3) else: self.loger.info('设备打开童锁失败') print('设备打开童锁失败') except Exception as e: print(e) # # # 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 Meat_ThermometerHandle(): dataList = '' def __init__(self,driver,device, com2,bps2,bytesize,stopbits,Ret2,timeout,com, bps,Ret1): self.device = device #日志 self.user_log = UserLog(self.device) self.loger = self.user_log.get_logger() self.driver = driver self.Ret1 = Ret1 self.Ret2 = Ret2 self.timeout = timeout # 获取屏幕分辨率 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.port = com self.bps = bps 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 except Exception as e: print("---异常---:", e) #进入设备详情页 def enter_device_once(self): try: try: WebDriverWait(self.driver, 120, 0.5).until( lambda x: x.find_element_by_android_uiautomator('new UiSelector().text(\"%s\")'%self.device)).is_displayed() except: print('没有找到设备'+str(self.device)) else: self.driver.find_element_by_android_uiautomator('new UiSelector().text(\"%s\")'%self.device).click() except Exception as e: print(e) # 进入设备详情页 def enter_device(self,times=1): n = 0 for i in range(times): try: try: WebDriverWait(self.driver, 60, 1).until( lambda x: x.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device)).is_displayed() except: self.loger.info('没有找到该设备,无法进入设备详情页') else: sleep(2) self.driver.find_element_by_android_uiautomator('new UiSelector().text(\"%s\")' % self.device).click() #检测蓝牙是否连接 if self.check_ble_status(): n += 1 print('本次蓝牙连接成功:[%s]'%n) self.loger.info('蓝牙连接成功') self.screenshot('蓝牙连接成功') #返回APP主页 self.driver.find_element_by_id('btn_back').click() sleep(3) else: print('60秒蓝牙任未连接') self.loger.info('蓝牙连接失败') self.screenshot('蓝牙连接失败') # 返回APP主页 self.driver.find_element_by_id('btn_back').click() sleep(3) except Exception as e: print(e) continue self.loger.info('蓝牙连接[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n) # 检查蓝牙状态 def check_ble_status(self): try: WebDriverWait(self.driver, 60, 0.5).until( lambda x: x.find_element_by_android_uiautomator("new UiSelector().text(\"已连接\")")).is_displayed() except: return False else: return True def ota(self,times): if(self.Ret1 and self.Ret2): #功能线程运行 threading.Thread(target=self.ota_handle,args=(times,)).start() #日志线程运行 threading.Thread(target=self.recv,).start() else: print("创建串口失败") #ota升级 def ota_handle(self,times=1): #进入设备主页 self.enter_device_once() n = 0 for i in range(times): try: if self.check_ble_status(): #进入设置页 btn_settting = self.driver.find_element_by_id("btn_setting") sleep(1) btn_settting.click() sleep(3) self.driver.find_element_by_android_uiautomator("new UiSelector().text(\"固件版本\")").click() sleep(2) #点击升级按钮 self.driver.find_element_by_id('btn_update').click() self.loger.info('开始升级') #抓串口日志 try: WebDriverWait(self.driver, 5, 0.5).until_not( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"设备升级\")")) except: try: WebDriverWait(self.driver, 120, 0.5).until_not( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"设备升级\")")) except: print('120秒设备都没有升级完') self.screenshot('120秒设备都没有升级完') else: # 校验串口日志 check_result = self.com_bluetooth_log_check(self.dataList,'success') if check_result: self.screenshot('第[%s]次OTA成功' % (i + 1)) self.loger.info('第[%s]次OTA成功' % (i + 1)) print('第[%s]次OTA成功' % (i + 1)) else: self.screenshot('第[%s]次OTA失败' % (i + 1)) self.loger.info('第[%s]次OTA失败' % (i + 1)) print('第[%s]次OTA失败' % (i + 1)) else: print('开始升级失败') self.screenshot('开始升级失败') sleep(3) #返回设备详情页 self.driver.find_element_by_id('btn_back').click() sleep(3) #长按设备开机键,开启设备 self.long_click() except Exception as e: print(e) continue self.loger.info('ota升级[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n) # 发数据 def Send_data(self, data): self.main_engine2.write(data) # 长按4秒 def long_click(self): # 发送开 self.Send_data(bytes.fromhex('A0 01 01 A2')) sleep(4) # 发送关 self.Send_data(bytes.fromhex('A0 01 00 A1')) # 短按 def once_click(self): # 发送开 self.Send_data(bytes.fromhex('A0 01 01 A2')) sleep(0.5) # 发送关 self.Send_data(bytes.fromhex('A0 01 00 A1')) # 监测串口日志 def com_bluetooth_log_check(self, dataList,sl): start = len(dataList) - 1000 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 40) #以冒号进行分割 # 打印串口日志 self.loger.info('蓝牙ota日志:' + str(strlist)) print('蓝牙ota日志:' + str(strlist)) if str(strlist).find(sl) >=0 : print('本次ota成功') return True else: print('本次ota失败') return False #档位切换日志检测 def com_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] # 监测串口日志 def com_wifi_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 except Exception as e: print("异常报错:", e) # 截图 def screenshot(self, msg): # 截图保存 now = time.strftime("%Y-%m-%d %H-%M-%S") image_name = setting.TEST_ERROR_Image + '/' + msg + " " + now + ".png" self.driver.save_screenshot(image_name)
class H6075MainHandle(): dataList = '' def __init__(self, driver, device, com, bps, timeout, Ret1, Ret2=None, com2=None, bps2=None, bytesize=None, stopbits=None): self.device = device #日志 self.user_log = UserLog(self.device) self.loger = self.user_log.get_logger() self.driver = driver self.Ret1 = Ret1 self.Ret2 = Ret2 # 获取屏幕分辨率 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.com_keyword = [ 'PT_PROTOCOL_MODE_SENCE_READ', 'PT_PROTOCOL_MODE_SENCE_RELAX', 'PT_PROTOCOL_MODE_SENCE_NIGHT', 'PT_PROTOCOL_MODE_SENCE_CANDLELIGHT', 'PT_PROTOCOL_MODE_SENCE_SHIMMER', 'PT_PROTOCOL_MODE_SENCE_BREATH', 'PT_PROTOCOL_MODE_SENCE_GLINT', 'PT_PROTOCOL_MODE_SENCE_BLINK' ] #模式 self.mode = ['阅读', '休闲', '夜灯', '烛光', '微光', '呼吸', '闪烁', '眨眼'] #打印串口 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 # except Exception as e: # print("---异常---:", e) def connect_H6075(self, times): if (self.Ret1 and self.Ret2): #功能线程运行 threading.Thread(target=self.add_device, args=(times, )).start() # threading.Thread(target=self.leve_switch, args=(times,)).start() # threading.Thread(target=self.on_off_switch, args=(times,)).start() #日志线程运行 threading.Thread(target=self.recv, ).start() else: print("创建串口失败") # 选择要添加的设备类型 def chooes_device(self): sleep(4) # 点击+号 # ele = self.driver.find_element_by_xpath('//android.widget.ImageView[2]') ele = self.driver.find_element_by_id('iv_add') sleep(2) ele.click() sleep(3) self.loger.info('开始添加设备') # 点击搜索 WebDriverWait(self.driver, 30, 1).until(EC.element_to_be_clickable( (By.ID, 'tv_search'))).click() sleep(2) # 切换输入法,方便后续调用输入法的搜索按钮 self.driver.activate_ime_engine( 'com.sec.android.inputmethod/.SamsungKeypad') # 搜索框输入device_type self.driver.press_keycode(14) sleep(0.5) self.driver.press_keycode(8) sleep(0.5) self.driver.press_keycode(10) sleep(0.5) self.driver.press_keycode(7) WebDriverWait(self.driver, 30, 1).until(EC.element_to_be_clickable( (By.ID, 'sku_icon'))).click() #设备配网 def add_device(self, times): n = 0 #成功次数 m = 0 #配网执行次数 k = 0 #WiFi列表加载失败次数 app_check = False com_check = False for i in range(times): #选择设备类型 try: self.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('进入蓝牙配对界面失败') else: sleep(2) self.once_click() # 蓝牙连接成功,点击完成 try: WebDriverWait(self.driver, 120, 1).until( lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")")).is_displayed( ) except: self.loger.info('蓝牙配对失败') self.screenshot('蓝牙配对失败') # 校验串口日志 self.com_bluetooth_log_check(self.dataList) else: # 校验串口日志 check_result = self.com_bluetooth_log_check( self.dataList) if check_result: self.loger.info('串口蓝牙日志校验成功') # 点击完成 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() WebDriverWait(self.driver, 120, 1).until( lambda x: x. find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")" )).is_clickable() except: self.loger.info('wifi设置页面加载失败') self.screenshot('wifi设置页面加载失败') k += 1 self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"跳过\")").click() sleep(2) self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"确认\")").click() #删除设备 self.delete_lempDevice() else: self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"完成\")").click() # 校验串口日志,等4秒 sleep(4) check_result_2 = self.com_wifi_log_check( self.dataList) # 判断设备是否配网成功 # try: # WebDriverWait(self.driver, 120, 1).until( # EC.element_to_be_clickable((By.ID, 'iv_switch'))) try: WebDriverWait(self.driver, 180, 0.1).until( EC.presence_of_element_located( (By.XPATH, '//*[contains(@text,"连接成功")]'))) except: self.loger.info('APP端Toast提示失败') self.loger.info('设备配网失败') continue else: self.loger.info('APP端Toast提示成功') add_result = True if check_result_2: self.loger.info('串口WiFi日志校验成功') com_check = True else: self.loger.info('串口WiFi日志校验失败') com_check = False if add_result or com_check: n += 1 self.loger.info('设备配网成功') else: self.loger.info('设备配网失败') # 删除设备 self.delete_lempDevice() else: self.loger.info('串口蓝牙日志校验失败') except Exception as e: print(e) continue self.start = False self.loger.info('[%s]' % self.device + '设备配网[%s]次,' % m + '成功了[%s]次,' % n + ',配网成功率%s' % (n / m * 100) + '%') self.loger.info('wifi设置页面加载失败次数:%s' % k) #删除设备 def delete_lempDevice(self): sleep(4) btn_settting = self.driver.find_element_by_id("btn_setting") sleep(1) btn_settting.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) #刷新首页 self.swip.swipe_down(600) try: WebDriverWait( self.driver, 5, 1 ).until(lambda x: x.find_element_by_android_uiautomator( 'new UiSelector().text(\"%s\")' % self.device)).is_displayed() except: self.loger.info('删除设备成功') self.loger.info( '分割线--------------------------------------------------分割线') else: self.loger.info('删除设备失败') # #发数据 # def Send_data(self,data): # self.main_engine2.write(data) # #长按4秒 # def long_click(self): # #发送开 # self.Send_data(bytes.fromhex('A0 01 01 A2')) # sleep(4) # #发送关 # self.Send_data(bytes.fromhex('A0 01 00 A1')) # # #短按 # def once_click(self): # #发送开 # self.Send_data(bytes.fromhex('A0 01 01 A2')) # sleep(0.5) # #发送关 # self.Send_data(bytes.fromhex('A0 01 00 A1')) # 监测串口日志 def com_bluetooth_log_check(self, dataList, sl): start = len(dataList) - 1000 end = len(dataList) str1 = dataList[start:end] str2 = str1.replace(" ", "").replace("\r", "").replace("\n", "") # 去掉空格、回车符、换行符 strlist = str2.split(':', 20) # 以冒号进行分割 # 打印串口日志 self.loger.info('蓝牙配对日志:' + str(strlist)) print('蓝牙配对日志:' + str(strlist)) if str(strlist).find(sl) >= 0: print('本次蓝牙配对成功') return True else: print('本次蓝牙配对失败') return False # 档位切换日志检测 def com_log_check(self, dataList, sl, option_type=None): if option_type != None: if option_type == 'on_off_switch': start = len(dataList) - 3400 elif option_type == 'leve_switch': start = len(dataList) - 1400 else: start = len(dataList) - 2200 else: start = len(dataList) - 3000 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 True # 监测串口日志 def com_wifi_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 except Exception as e: print("异常报错:", e) # 截图 def screenshot(self, msg): # 截图保存 now = time.strftime("%Y-%m-%d %H-%M-%S") image_name = LOG_DIR + '/' + msg + " " + now + ".png" self.driver.save_screenshot(image_name) #模式切换 def mode_switch(self, times): if (self.Ret1): #功能线程运行 threading.Thread(target=self.mode_switch_handle, args=(times, )).start() #日志线程运行 threading.Thread(target=self.recv, ).start() else: print("创建串口失败") # 进入设备详情页 def enter_device(self): 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() # 模式切换 def mode_switch_handle(self, times): #进入设备详情页 self.enter_device() n = 0 try: WebDriverWait( self.driver, 120, 1).until(lambda x: x.find_element_by_android_uiautomator( "new UiSelector().text(\"亮度\")")).is_displayed() except: print('设备详情页加载失败') else: for i in range(times): for i in range(8): # 开始模式循环操作 self.driver.find_element_by_xpath( '//*[@resource-id="com.govee.home:id/scenes_list"]/android.widget.RelativeLayout[%s]' % (i + 1) + '/android.widget.ImageView[1]').click() if self.com_keyword[i] == 'PT_PROTOCOL_MODE_SENCE_READ': sleep(3) else: sleep(1) # 监测串口日志 check_result = self.com_log_check(self.dataList, self.com_keyword[i]) if check_result == True: n += 1 print(self.mode[i] + '切换成功') self.loger.info(self.mode[i] + '切换成功') try: WebDriverWait(self.driver, 60, 0.2).until( EC.element_to_be_clickable(( By.XPATH, '//*[@resource-id="com.govee.home:id/scenes_list"]/android.widget.RelativeLayout[%s]' % (i + 1) + '/android.widget.ImageView[1]'))) except: self.loger.info(self.mode[i] + '切换后设备断开连接') self.screenshot(self.mode[i] + '切换后设备断开连接') self.driver.find_element_by_android_uiautomator( "new UiSelector().text(\"重新连接\")").click() else: print(self.mode[i] + '切换后设备连接正常') self.loger.info(self.mode[i] + '切换后设备连接正常') else: print(self.mode[i] + '切换失败') self.loger.info(self.mode[i] + '切换失败') sleep(3) self.start = False self.loger.info('模式切换[%s]次' % times + ',成功了[%s]次!!!!!!!!' % n)
class H6076MainCase(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.device_name = [ 'H6076_4B52', ] # 日志 self.user_log = UserLog(self.device_name[0]) self.loger = self.user_log.get_logger() Ret1 = False #日志打印串口是否创建成功标志 Ret2 = False #控制串口是否创建成功标志 com1 = 'com15' bps = 115200 timeout = 0.5 com2 = "com5" bps2 = 9600 bytesize = 8 stopbits = 1 self.h6076Main_h = H6076MainHandle(self.driver, self.device_name[0], com1, bps, timeout, com2, bps2, bytesize, stopbits, Ret1, Ret2, self.loger) #前置条件 def setUp(self) -> None: print('开始测试') #配网 @unittest.skip('配网不执行') def test_1_connect_device(self): #是否跳过WiFi设置 skip_wifi = False #测试次数 times = 1 try: self.h6076Main_h.connect_H6076(skip_wifi, times) except Exception as e: print(e) self.loger.info(e) #开关切换 # @unittest.skip('开关切换不执行') def test_on_off_switch(self): #测试次数 times = 6 try: self.h6076Main_h.on_off_switch(times) except Exception as e: print(e) @unittest.skip('不执行') def test_enter_device(self): #测试次数 times = 10 try: self.h6076Main_h.enter_out_device_handle(times) except Exception as e: print(e) #颜色、色温切换 @unittest.skip('颜色、色温切换不执行') def test_color_switch(self): #测试次数 times = 100 try: self.h6076Main_h.color_switch(times) except Exception as e: print(e) #亮度切换 @unittest.skip('亮度切换不执行') def test_brightness_switch(self): #测试次数 times = 30 try: self.h6076Main_h.brightness_switch(times) except Exception as e: print(e) #灵敏度切换 @unittest.skip('亮度切换不执行') def test_sensitivity_switch(self): #测试次数 times = 2 try: self.h6076Main_h.sensitivity_switch(times) except Exception as e: print(e) # 模式切换 @unittest.skip('不执行') def test_mode_switch(self): #测试次数 times = 100 try: self.h6076Main_h.mode_switch(times) except Exception as e: print(e)
class H6199MainCase(unittest.TestCase): @classmethod def setUpClass(self) -> None: self.user_log = UserLog() self.logger = self.user_log.get_logger() self.coon = ConnectMobile() self.driver = self.coon.get_driver() self.screen_x = self.coon.get_screen_x() self.screen_y = self.coon.get_screen_y() self.h6199Main_h = H6199MainHandle(self.driver, self.screen_x, self.screen_y, self.logger) self.wifi_check_h = StatusCheckHandle(self.driver, self.logger) self.wifi_set_h = WIFISetHandle(self.driver, self.screen_x, self.screen_y, self.logger) self.device_name = ['H6199_1540', 'H6199_1B2F'] #创建串口 # self.port = com # self.bps = bps # self.timeout = timeout # global Ret # try: # # 打开串口,并得到串口对象 # self.main_engine = serial.Serial(self.port, self.bps, timeout=self.timeout) # self.main_engine.flushInput() # 清空缓冲区 # # 判断是否打开成功 # if (self.main_engine.is_open): # Ret = True # except Exception as e: # print("---异常---:", e) @classmethod def tearDownClass(self) -> None: self.user_log.close_file_handler() #前置条件 def setUp(self) -> None: # self.adb_log.write_log() pass #模式切换 def test_mode_switch(self): try: self.h6199Main_h.mode_switch() except Exception as e: print(e) @unittest.skip('不执行') def test_ota(self): self.h6199Main_h.enter_H6199_1540_main_face() n = 0 for i in range(200): ota_result = self.h6199Main_h.ota() if ota_result: n += 1 self.logger.info('第[%s]次OTA成功' % (i + 1)) else: self.logger.info('第[%s]次OTA失败' % (i + 1)) print('OTA升级200次,成功了[%s]次!!!!!!!!' % n) self.logger.info('OTA升级200次,成功了[%s]次!!!!!!!!' % n) @unittest.skip('不执行') def test_wifi_check(self): n = 0 for i in range(500): try: connect = self.wifi_check_h.goin_H6199() if connect: n += 1 except Exception as e: self.logger.info(e) self.logger.info('蓝牙连接测试500次,成功了[%s]次!!!!!!!!' % n) @unittest.skip('不执行') def test_wifi_set(self): n = 0 times = 200 for i in range(times): try: connect = self.wifi_set_h.connect_wifi(self.device_name[1]) if connect: n += 1 self.logger.info('第[%s]次WiFi连接成功' % (i + 1)) else: self.logger.info('第[%s]次WiFi连接失败' % (i + 1)) except Exception as e: self.logger.info(e) print('连接[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n) self.logger.info('连接[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n) @unittest.skip('不执行') #不断进入WIFI设置页 def test_enter_wifiSetting(self): try: self.h6199Main_h.enter_wifiSetting() except Exception as e: print(e) # # 接收串口数据 # def recv(self): # print("开始接收数据:") # while True: # try: # count = self.main_engine.inWaiting() # 获取串口缓冲区数据 # if count != 0: # data = self.main_engine.read(self.main_engine.in_waiting).decode("gbk") # 读出串口数据,数据采用gbk编码 # time.sleep(0.1) # 延时0.1秒,免得CPU出问题 # self.dataList += data # except Exception as e: # print("异常报错:", e) # 后置条件 def tearDown(self): for method_name, error in self._outcome.errors: if error: case_name = self._testMethodName now = time.strftime("%Y-%m-%d %H-%M-%S") image_name = setting.TEST_ERROR_Image + '/' + case_name + " " + now + ".png" self.driver.save_screenshot(image_name) # self.driver.close() print("测试结束")