Beispiel #1
0
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)
Beispiel #2
0
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("测试结束")
Beispiel #3
0
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')
Beispiel #4
0
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
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
# -*- 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":
Beispiel #8
0
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("测试结束")
Beispiel #9
0
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("创建串口失败")
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
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("测试结束")