예제 #1
0
    def __init__(self, platformVersion, mobileName, device, com, bps, timeout,
                 com2, bps2, bytesize, stopbits):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = platformVersion
        desired_caps['deviceName'] = mobileName
        desired_caps['appPackage'] = 'com.govee.home'
        # desired_caps['app'] = 'F:// debug.apk'
        desired_caps['appActivity'] = 'com.govee.home.HomeActivity'
        desired_caps['noReset'] = 'true'
        desired_caps['automationName'] = 'Uiautomator2'
        desired_caps['adbExecTimeout'] = 200000
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                                       desired_caps)

        # 获取屏幕分辨率
        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.device = device

        #日志
        self.user_log = UserLog(self.device)
        self.loger = self.user_log.get_logger()

        #打印串口
        self.port = com
        self.bps = bps
        self.timeout = timeout
        self.start = True
        self.smart_Hygrometer = '5052'
        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):
        #         Ret1 = True
        # except Exception as e:
        #     print("---异常---:", e)

        #控制串口
        self.port2 = com2
        self.bps2 = bps2
        self.bytesize = bytesize
        self.stopbits = stopbits
        global Ret2
예제 #2
0
    def __init__(self, platformVersion, mobileName, device, com, bps, timeout):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = platformVersion
        desired_caps['deviceName'] = mobileName
        desired_caps['appPackage'] = 'com.govee.home'
        # desired_caps['app'] = 'F:// debug.apk'
        desired_caps['appActivity'] = 'com.govee.home.HomeActivity'
        desired_caps['noReset'] = 'true'
        desired_caps['automationName'] = 'Uiautomator2'
        desired_caps['adbExecTimeout'] = 200000
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                                       desired_caps)

        # 获取屏幕分辨率
        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.myDevice_p = MyDevicePage(self.driver)
        self.user_log = UserLog()
        self.loger = self.user_log.get_logger()
        # self.h6199_p = H6199MainPage(self.driver)
        self.device = device

        self.start = True
        #创建串口
        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)
예제 #3
0
class LightingEffectsLibrary():
    dataList = ''

    def __init__(self, platformVersion, mobileName, device, com, bps, timeout):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = platformVersion
        desired_caps['deviceName'] = mobileName
        desired_caps['appPackage'] = 'com.govee.home'
        # desired_caps['app'] = 'F:// debug.apk'
        desired_caps['appActivity'] = 'com.govee.home.HomeActivity'
        desired_caps['noReset'] = 'true'
        desired_caps['automationName'] = 'Uiautomator2'
        desired_caps['adbExecTimeout'] = 200000
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                                       desired_caps)

        # 获取屏幕分辨率
        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.myDevice_p = MyDevicePage(self.driver)
        self.user_log = UserLog()
        self.loger = self.user_log.get_logger()
        # self.h6199_p = H6199MainPage(self.driver)
        self.device = device

        self.start = True
        #创建串口
        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)

    #进入设备主页
    def enter_H6199_1540_main_face(self):
        try:
            WebDriverWait(
                self.driver, 20, 0.5
            ).until(lambda x: x.find_element_by_android_uiautomator(
                'new UiSelector().text(\"%s\")' % self.device)).is_displayed()
        except:
            print('进入设备详情页失败')
        else:
            sleep(2)
            self.driver.find_element_by_android_uiautomator(
                'new UiSelector().text(\"%s\")' % self.device).click()

    #颜色切换
    def switch_color(self, times):
        self.enter_H6199_1540_main_face()
        n = 0
        sleep(4)
        try:
            WebDriverWait(
                self.driver, 30,
                0.5).until(lambda x: x.find_element_by_android_uiautomator(
                    "new UiSelector().text(\"灯效库\")")).is_displayed()
        except:
            print('进入设备详情页失败')
        else:
            sleep(2)
            self.driver.find_element_by_android_uiautomator(
                "new UiSelector().text(\"灯效库\")").click()
            try:
                WebDriverWait(
                    self.driver, 20,
                    0.5).until(lambda x: x.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"灯效库\")")).is_displayed()
            except:
                print('进入灯效库页失败')
            else:
                sleep(3)
                for k in range(7):
                    for j in range(3, 11, 2):
                        for i in range(5):
                            # 开始操作
                            sleep(1)
                            self.driver.find_element_by_xpath(
                                '//*[@resource-id="com.govee.home:id/rv_data"]/android.widget.RelativeLayout[%s]'
                                % j +
                                '/androidx.recyclerview.widget.RecyclerView[1]/android.widget.LinearLayout[%s]'
                                % (i + 1)).click()
                            sleep(2)
                            # 监测串口日志
                            check_result = self.com_log_check(self.dataList)
                            if check_result:
                                n += 1
                    #向上滑
                    self.swip.swipe_up(862)
                    sleep(2)
                    self.swip.swipe_up(839)
                    sleep(2)

        self.loger.info('颜色切换[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n)

    #监测串口日志
    def com_log_check(self, dataList):
        start = len(dataList) - 300
        end = len(dataList)
        str1 = dataList[start:end]
        str2 = str1.replace(" ", "").replace("\r",
                                             "").replace("\n",
                                                         "")  # 去掉空格、回车符、换行符
        strlist = str2.split(':', 10)  # 以冒号进行分割
        #打印串口日志
        self.loger.info('本次操作后蓝牙日志:' + str(strlist))
        for i in range(len(strlist)):
            sl = strlist[i][len(strlist[i]) - 7:len(strlist[i])]
            if sl == 'blesend':
                print('blesend:' + strlist[i + 1])
                self.loger.info('蓝牙回复结果:blesend:' + str(strlist[i + 1]))
                if strlist[i + 1][4] == '0' and strlist[i + 1][5] == '0':
                    self.loger.info('本次颜色切换成功')
                    print('本次颜色切换成功')
                    return True
                else:
                    self.loger.info('本次颜色切换失败')
                    print('本次颜色切换失败')
                    return False

    # 截图
    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 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)
예제 #4
0
class Meat_Thermometer():
    dataList = ''

    def __init__(self, platformVersion, mobileName, device, com, bps, timeout):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = platformVersion
        desired_caps['deviceName'] = mobileName
        desired_caps['appPackage'] = 'com.govee.home'
        # desired_caps['app'] = 'F:// debug.apk'
        desired_caps['appActivity'] = 'com.govee.home.HomeActivity'
        desired_caps['noReset'] = 'true'
        desired_caps['automationName'] = 'Uiautomator2'
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                                       desired_caps)

        self.device = device

        # self.myDevice_p = MyDevicePage(self.driver)
        self.user_log = UserLog(self.device)
        self.loger = self.user_log.get_logger()
        # self.h6199_p = H6199MainPage(self.driver)

        #创建串口
        self.port = com
        self.bps = bps
        self.timeout = timeout
        self.start = True
        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)

    # 选择要添加的设备类型
    def chooes_device(self):
        #点击+号
        WebDriverWait(self.driver, 20,
                      1).until(EC.element_to_be_clickable(
                          (By.ID, 'add'))).click()
        sleep(3)
        # 点击搜索
        WebDriverWait(self.driver, 10,
                      1).until(EC.element_to_be_clickable(
                          (By.ID, 'tv_search'))).click()
        sleep(2)
        # 切换至讯飞输入法,方便后续调用输入法的搜索按钮
        self.driver.activate_ime_engine(
            'com.sec.android.inputmethod/.SamsungKeypad')
        # 点击确认位置-搜索键s
        # 搜索框输入device_type
        self.driver.press_keycode(12)
        sleep(0.5)
        self.driver.press_keycode(8)
        sleep(0.5)
        self.driver.press_keycode(15)
        sleep(0.5)
        self.driver.press_keycode(13)
        # 搜索结果
        WebDriverWait(self.driver, 20, 1).until(
            EC.element_to_be_clickable((By.ID, 'search_result'))).click()

    # 添加设备
    def add_device(self, device_name):
        # 扫描设备
        # 查看扫描结果
        while True:
            try:
                WebDriverWait(
                    self.driver, 120,
                    1).until(lambda x: x.find_element_by_android_uiautomator(
                        'new UiSelector().text(\"%s\")' % device_name)
                             ).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\")' % device_name)
                sleep(3)
                ele.click()
                # 蓝牙连接成功,点击完成
                try:
                    WebDriverWait(self.driver, 120, 1).until(
                        lambda x: x.find_element_by_android_uiautomator(
                            "new UiSelector().text(\"完成\")")).is_displayed()
                except:
                    while True:
                        self.loger.info('蓝牙第一次连接失败')
                        self.screenshot('蓝牙第一次连接失败')
                        # 蓝牙连接失败,重新连接
                        self.driver.find_element_by_android_uiautomator(
                            "new UiSelector().text(\"重新连接\")").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('蓝牙第二次连接失败')
                        else:
                            self.loger.info('蓝牙第二次连接成功')
                            self.driver.find_element_by_android_uiautomator(
                                "new UiSelector().text(\"完成\")").click()
                            break
                else:
                    self.loger.info('蓝牙第一次连接成功')
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"完成\")").click()
                    break

        # self.loger.info('模式切换[%s]次,'%times+'成功了[%s]次!!!!!!!!' %n)

    # 进入设备详情页
    def enter_device(self, times):
        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 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)
예제 #5
0
class ModeSwitch():
    dataList = ''

    def __init__(self, platformVersion, mobileName, device, com, bps, timeout):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = platformVersion
        desired_caps['deviceName'] = mobileName
        desired_caps['appPackage'] = 'com.govee.home'
        # desired_caps['app'] = 'F:// debug.apk'
        desired_caps['appActivity'] = 'com.govee.home.HomeActivity'
        desired_caps['noReset'] = 'true'
        desired_caps['automationName'] = 'Uiautomator2'
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                                       desired_caps)

        # self.myDevice_p = MyDevicePage(self.driver)
        self.user_log = UserLog()
        self.loger = self.user_log.get_logger()
        # self.h6199_p = H6199MainPage(self.driver)
        self.device = device

        #创建串口
        self.port = com
        self.bps = bps
        self.timeout = timeout
        self.start = True
        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)

    def enter_H6199_1540_main_face(self):
        try:
            WebDriverWait(
                self.driver, 20, 0.5
            ).until(lambda x: x.find_element_by_android_uiautomator(
                'new UiSelector().text(\"%s\")' % self.device)).is_displayed()
        except:
            print('进入设备详情页失败')
        else:
            sleep(2)
            self.driver.find_element_by_android_uiautomator(
                'new UiSelector().text(\"%s\")' % self.device).click()

    #模式切换
    def mode_switch(self, times):
        self.enter_H6199_1540_main_face()
        n = 0
        sleep(4)
        try:
            WebDriverWait(self.driver, 60, 1).until(
                EC.element_to_be_clickable((By.ID, 'mode_3_icon')))
        except:
            print('设备详情页加载失败')
        else:
            self.start = True
            for i in range(times):
                sleep(2)
                # 音乐模式
                try:
                    WebDriverWait(self.driver, 60, 0.2).until(
                        EC.element_to_be_clickable((By.ID, 'mode_1_icon')))
                except:
                    self.loger.info('蓝牙连接失败')
                    self.screenshot('蓝牙连接失败')
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"重新连接\")").click()
                else:
                    self.driver.find_element_by_id('mode_1_icon').click()
                    sleep(2)
                    # 监测串口日志
                    check_result = self.com_log_check(self.dataList)
                    if check_result:
                        n += 1
                sleep(3)
                # 视频模式
                try:
                    WebDriverWait(self.driver, 60, 0.2).until(
                        EC.element_to_be_clickable((By.ID, 'mode_2_icon')))
                except:
                    self.loger.info('蓝牙连接失败')
                    self.screenshot('蓝牙连接失败')
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"重新连接\")").click()
                else:
                    self.driver.find_element_by_id('mode_2_icon').click()
                    # 检测摄像头
                    if self.check_camera_status():
                        self.loger.info('切换视频模式后,检测到摄像头未安装')
                        self.screenshot('切换视频模式后,检测到摄像头未安装')
                        WebDriverWait(self.driver, 60, 0.5).until(
                            lambda x: x.find_element_by_android_uiautomator(
                                "new UiSelector().text(\"忽略\")")).click()
                    else:
                        self.loger.info('切换视频模式后,检测到了摄像头')
                        # self.screenshot('切换视频模式后,检测到了摄像头')
                        n += 1
                        # 检测蓝牙
                        if self.check_ble_status():
                            self.loger.info('切换视频模式后,蓝牙连接正常')
                            sleep(2)
                            # 监测串口日志
                            check_result = self.com_log_check(self.dataList)
                            if check_result:
                                n += 1
                        else:
                            self.loger.info('切换视频模式后,蓝牙断连')
                            self.screenshot('切换视频模式后,蓝牙断连')
                            WebDriverWait(self.driver, 60, 0.5).until(
                                lambda x: x.
                                find_element_by_android_uiautomator(
                                    "new UiSelector().text(\"重新连接\")")).click(
                                    )
                sleep(3)
                # 颜色模式
                try:
                    WebDriverWait(self.driver, 60, 0.2).until(
                        EC.element_to_be_clickable((By.ID, 'mode_3_icon')))
                except:
                    self.loger.info('蓝牙连接失败')
                    self.screenshot('蓝牙连接失败')
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"重新连接\")").click()
                else:
                    self.driver.find_element_by_id('mode_3_icon').click()
                    sleep(2)
                    # 监测串口日志
                    check_result = self.com_log_check(self.dataList)
                    if check_result:
                        n += 1
                sleep(3)
                # 场景模式
                try:
                    WebDriverWait(self.driver, 60, 0.2).until(
                        EC.element_to_be_clickable((By.ID, 'mode_4_icon')))
                except:
                    self.loger.info('蓝牙连接失败')
                    self.screenshot('蓝牙连接失败')
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"重新连接\")").click()
                else:
                    self.driver.find_element_by_id('mode_4_icon').click()
                    sleep(2)
                    # 监测串口日志
                    check_result = self.com_log_check(self.dataList)
                    if check_result:
                        n += 1
                # DIY模式
                try:
                    WebDriverWait(self.driver, 60, 0.2).until(
                        EC.element_to_be_clickable((By.ID, 'mode_5_icon')))
                except:
                    self.loger.info('蓝牙连接失败')
                    self.screenshot('蓝牙连接失败')
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"重新连接\")").click()
                else:
                    self.h6199_p.get_mode_5_icon_element().click()
                    if self.check_ble_status():
                        self.loger.info('切换DIY模式后,蓝牙连接正常')
                    else:
                        self.loger.info('切换DIY模式后,蓝牙断连')
                        self.screenshot('切换DIY模式后,蓝牙断连')
                        WebDriverWait(self.driver, 60, 0.5).until(
                            lambda x: x.find_element_by_android_uiautomator(
                                "new UiSelector().text(\"重新连接\")")).click()
                # 关闭灯带
                try:
                    WebDriverWait(self.driver, 60, 0.5).until(
                        EC.element_to_be_clickable((By.ID, 'btn_switch')))
                except:
                    print('没有关闭按钮')
                else:
                    self.h6199_p.get_btn_switch_element().click()
                    self.loger.info('关闭设备')
                    sleep(10)
                    # 开启灯带
                    try:
                        WebDriverWait(self.driver, 60, 0.5).until(
                            EC.element_to_be_clickable((By.ID, 'btn_switch')))
                    except:
                        print('没有开启按钮')
                    else:
                        self.h6199_p.get_btn_switch_element().click()
                        self.loger.info('打开设备')
                        n += 1
                        self.loger.info(
                            '我是分割线-----------------------------------------')
                        sleep(10)
        self.loger.info('模式切换[%s]次,' % times + '成功了[%s]次!!!!!!!!' % n)

    # 监测串口日志
    def com_log_check(self, dataList):
        start = len(dataList) - 200
        end = len(dataList)
        str1 = dataList[start:end]
        str2 = str1.replace(" ", "").replace("\r",
                                             "").replace("\n",
                                                         "")  # 去掉空格、回车符、换行符
        strlist = str2.split(':', 10)  # 以冒号进行分割
        # 打印串口日志
        self.loger.info('模式切换蓝牙日志:' + str(strlist))
        for i in range(len(strlist)):
            sl = strlist[i][len(strlist[i]) - 7:len(strlist[i])]
            if sl == 'blesend':
                print('blesend:' + strlist[i + 1])
                self.loger.info('蓝牙回复结果:blesend:' + str(strlist[i + 1]))
                if strlist[i + 1][4] == '0' and strlist[i + 1][5] == '0':
                    self.loger.info('本次模式切换成功')
                    print('本次模式切换成功')
                    return True
                else:
                    self.loger.info('本次模式切换失败')
                    print('本次模式切换失败')
                    return False

    #蓝牙状态
    def check_ble_status(self):
        try:
            WebDriverWait(
                self.driver, 5,
                0.5).until(lambda x: x.find_element_by_android_uiautomator(
                    "new UiSelector().text(\"已连接\")")).is_displayed()
        except:
            return False
        else:
            return True

    #摄像头状态
    def check_camera_status(self):
        try:
            WebDriverWait(
                self.driver, 5,
                0.5).until(lambda x: x.find_element_by_android_uiautomator(
                    "new UiSelector().text(\"忽略\")")).is_displayed()
        except:
            return False
        else:
            return True

    # 截图
    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 recv(self):
        if self.start:
            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出问题
                    # print(data)
                    self.dataList += data
            except Exception as e:
                print("异常报错:", e)
예제 #6
0
class Humidifier2():
    dataList = ''

    def __init__(self, platformVersion, mobileName, device, com, bps, timeout,
                 com2, bps2, bytesize, stopbits):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = platformVersion
        desired_caps['deviceName'] = mobileName
        desired_caps['appPackage'] = 'com.govee.home'
        # desired_caps['app'] = 'F:// debug.apk'
        desired_caps['appActivity'] = 'com.govee.home.HomeActivity'
        desired_caps['noReset'] = 'true'
        desired_caps['automationName'] = 'Uiautomator2'
        desired_caps['adbExecTimeout'] = 200000
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                                       desired_caps)

        # 获取屏幕分辨率
        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.device = device

        #日志
        self.user_log = UserLog(self.device)
        self.loger = self.user_log.get_logger()

        #打印串口
        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):
                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):
                Ret2 = True
        except Exception as e:
            print("---异常---:", e)

    # 选择要添加的设备类型
    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(12)
        sleep(0.5)
        self.driver.press_keycode(8)
        sleep(0.5)
        self.driver.press_keycode(12)
        sleep(0.5)
        self.driver.press_keycode(8)
        WebDriverWait(self.driver, 30,
                      1).until(EC.element_to_be_clickable(
                          (By.ID, 'sku_icon'))).click()

    #设备配网
    def add_device(self, times):
        result = 0
        m = 0
        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('进入蓝牙配对界面失败')
                    #蓝牙没有连接成功时,重新连接,直到成功
                    while True:
                        try:
                            WebDriverWait(
                                self.driver, 5,
                                1).until(lambda x: x.
                                         find_element_by_android_uiautomator(
                                             'new UiSelector().text(\"%s\")' %
                                             self.device)).is_displayed()
                        except:
                            print('连接成功')
                            break
                            # 校验串口日志
                            # self.com_bluetooth_log_check(self.dataList)
                        else:
                            print('再次连接')
                            self.driver.find_element_by_android_uiautomator(
                                'new UiSelector().text(\"%s\")' %
                                self.device).click()
                    result = self.connect_ble_wifi(result)
                else:
                    result = self.connect_ble_wifi(result)
            except Exception as e:
                print(e)
                self.loger.info(e)
                continue
        self.start = False
        self.loger.info('[%s]' % self.device + '设备配网[%s]次,' % m +
                        '成功了[%s]次,' % result + ',配网成功率%s' %
                        (result / m * 100) + '%')

    def connect_ble_wifi(self, n):
        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.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()
            except:
                self.loger.info('进入WiFi配置界面失败')
            else:
                self.driver.find_element_by_android_uiautomator(
                    "new UiSelector().text(\"完成\")").click()
                # 校验串口日志
                # sleep(3)
                # 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:
                    print('WiFi连接失败')
                    self.loger.info('WiFi连接失败')
                    self.screenshot('WiFi连接失败')
                    # continue
                    # wifi连接失败时点击跳过
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"跳过\")").click()
                    sleep(1)
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"确认\")").click()
                    sleep(1)
                    # 点击确定
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"确定\")").click()
                    # 点击左上角网关图标
                    WebDriverWait(self.driver, 10, 1).until(
                        EC.element_to_be_clickable((By.ID, 'iv_gw'))).click()
                    sleep(3)
                    ele = self.driver.find_element_by_android_uiautomator(
                        'new UiSelector().text(\"%s\")' % self.device)
                    sleep(1)
                    ele.click()
                    # 删除设备
                    self.delete_lempDevice()
                else:
                    n += 1
                    print('第[%s]次' % n + '配网成功')
                    self.loger.info('第[%s]次' % n + '配网成功')
                    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('设备配网失败')
                    sleep(1)
                    # 点击确定
                    self.driver.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"确定\")").click()
                    # 点击左上角网关图标
                    WebDriverWait(self.driver, 10, 1).until(
                        EC.element_to_be_clickable((By.ID, 'iv_gw'))).click()
                    try:
                        WebDriverWait(self.driver, 8, 1).until(
                            lambda x: x.find_element_by_android_uiautomator(
                                'new UiSelector().text(\"%s\")' % self.device)
                        ).is_displayed()
                    except:
                        print('网关列表里没有找到网关')
                        self.loger.info('网关列表里没有找到网关')
                    else:
                        self.driver.find_element_by_android_uiautomator(
                            'new UiSelector().text(\"%s\")' %
                            self.device).click()
                    # 删除设备
                    self.delete_lempDevice()
                    return n

    #删除设备
    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)
        self.loger.info('我是分割线我是分割线我是分割线我是分割线我是分割线我是分割线我是分割线我是分割线')
        # try:
        #     WebDriverWait(self.driver, 10, 1).until(EC.element_to_be_clickable((By.ID, 'iv_gw'))).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)
예제 #7
0
class Humidifier2():
    dataList = ''

    def __init__(self, platformVersion, mobileName, device, com, bps, timeout,
                 com2, bps2, bytesize, stopbits):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = platformVersion
        desired_caps['deviceName'] = mobileName
        desired_caps['appPackage'] = 'com.govee.home'
        # desired_caps['app'] = 'F:// debug.apk'
        desired_caps['appActivity'] = 'com.govee.home.HomeActivity'
        desired_caps['noReset'] = 'true'
        desired_caps['automationName'] = 'Uiautomator2'
        desired_caps['adbExecTimeout'] = 200000
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                                       desired_caps)

        # 获取屏幕分辨率
        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.device = device

        #日志
        self.user_log = UserLog(self.device)
        self.loger = self.user_log.get_logger()

        #打印串口
        self.port = com
        self.bps = bps
        self.timeout = timeout
        self.start = True
        self.smart_Hygrometer = '5052'
        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):
        #         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):
        #        Ret2 = True
        # except Exception as e:
        #     print("---异常---:", e)

    # 选择要添加的设备类型
    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(12)
        sleep(0.5)
        self.driver.press_keycode(8)
        sleep(0.5)
        self.driver.press_keycode(12)
        sleep(0.5)
        self.driver.press_keycode(8)
        WebDriverWait(self.driver, 30,
                      1).until(EC.element_to_be_clickable(
                          (By.ID, 'sku_icon'))).click()

    # #发数据
    # 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 bound(self, times):
        n = 0
        # 进入设备详情页
        self.enter_device()
        try:
            WebDriverWait(self.driver, 30, 0.5).until(
                EC.presence_of_element_located((By.ID, 'iv_switch')))
        except:
            self.loger.info('设备详情页加载失败')
            print('设备详情页加载失败')
        else:
            self.loger.info('设备详情页加载成功')
            print('设备详情页加载成功')
            sleep(2)
            self.swip.swipe_up(600)
            try:
                WebDriverWait(
                    self.driver, 5,
                    0.5).until(lambda x: x.find_element_by_android_uiautomator(
                        "new UiSelector().text(\"5052\")")).is_displayed()
            except:
                for i in range(times):
                    try:
                        # 开始操作---添加
                        # self.driver.find_element_by_android_uiautomator("new UiSelector().text(\"绑定温湿度计\")").click()
                        sleep(1)
                        self.driver.find_element_by_android_uiautomator(
                            'new UiSelector().text(\"绑定温湿度计\")').click()
                        # 等待
                        try:
                            WebDriverWait(self.driver, 60, 0.5).until(
                                lambda x: x.
                                find_element_by_android_uiautomator(
                                    "new UiSelector().text(\"5052\")"
                                )).is_displayed()
                        except:
                            print('等1分钟没有发现温湿度计')
                            self.loger.info('等1分钟没有发现温湿度计')
                            self.screenshot('等1分钟没有发现温湿度计')
                        else:
                            # 勾选
                            self.driver.find_element_by_android_uiautomator(
                                'new UiSelector().text(\"5052\")').click()
                            # 确定
                            WebDriverWait(self.driver, 10, 1).until(
                                EC.presence_of_element_located(
                                    (By.ID, 'btn_ok'))).click()
                            # 上滑
                            sleep(2)
                            self.swip.swipe_up(600)
                            try:
                                WebDriverWait(self.driver, 120, 0.5).until_not(
                                    EC.presence_of_element_located(
                                        (By.XPATH,
                                         '//*[contains(@text,"连接中")]')))
                            except:
                                print('2分钟还一直连接中')
                                self.screenshot('2分钟还一直连接中')
                            else:
                                try:
                                    WebDriverWait(self.driver, 3, 0.5).until(
                                        lambda x: x.
                                        find_element_by_android_uiautomator(
                                            "new UiSelector().text(\"温度单位\")"
                                        )).is_displayed()
                                except:
                                    print('绑定失败')
                                    self.loger.info('绑定失败')
                                    self.screenshot('绑定失败')
                                else:
                                    n += 1
                                    print('第[%s]次添加成功,开始删除温湿度计' % n)
                                    self.loger.info('第[%s]次添加成功,开始删除温湿度计' % n)
                                # 删除设备
                                try:
                                    self.driver.find_element_by_android_uiautomator(
                                        'new UiSelector().text(\"5052\")'
                                    ).click()
                                    WebDriverWait(self.driver, 5, 0.5).until(
                                        EC.presence_of_element_located(
                                            (By.ID, 'btn_delete'))).click()
                                    WebDriverWait(self.driver, 5, 0.5).until(
                                        EC.presence_of_element_located(
                                            (By.ID, 'btn_done'))).click()
                                except Exception as e:
                                    print(e)
                    except Exception as e:
                        print(e)
                        continue
                # 测试完毕,停止串口打印
                self.start = False
            else:
                self.loger.info('已经添加过了温湿度计,删除掉')
                print('已经添加过了温湿度计,删除掉')
                # 删除设备
                try:
                    self.driver.find_element_by_android_uiautomator(
                        'new UiSelector().text(\"5052\")').click()
                    WebDriverWait(self.driver, 5, 0.5).until(
                        EC.presence_of_element_located(
                            (By.ID, 'btn_delete'))).click()
                    WebDriverWait(self.driver, 5, 0.5).until(
                        EC.presence_of_element_located(
                            (By.ID, 'btn_done'))).click()
                except Exception as e:
                    print(e)