Exemple #1
0
 def check_account(self, request, init_setup):
     """
     校验当前登陆账号是否正确,不正确则自动切换
     调用的函数需要传参:
     @pytest.mark.parametrize('switch_account', ['robotic'], indirect=True)
     :param init_setup:
     :param request:
     :return:
     """
     account = request.param
     if home_page.is_welcome() is False:
         start_page.into_login()
         if account is not None:
             start_page.select_country('login', data.get_country(account))
             start_page.login_email(data.get_account(account),
                                    data.get_account('pw'))
         else:
             raise Exception('登陆账号为空')
     else:
         if data.get_username(account) in home_page.read_username():
             return
         if account is not None:
             TestBulbs.change_account(account)
         else:
             raise Exception('登陆账号为空')
    def test_delete_account(self, check_account):
        """
        正常删除账户:
        1. 进入用户中心,点击 delete account
        2.点击 delete按钮
        【checkpoint】弹出确认弹窗:Are you sure you want to delete this account?
        3.点击 ok按钮
        【checkpoint】检查是否回到登陆页面(安卓和ios页面不一样)
        """
        home_page.into_system()
        system_page.view_account()
        user_page.delete_account()
        assert user_page.delete_account_window(
        ) == 'Are you sure you want to delete this account?', '未显示删除账号确认弹窗'
        if user_page.platform == 'ios':
            user_page.yes
        else:
            user_page.ok
        assert start_page.is_start_page(), '未返回到登陆界面'

        start_page.into_login()
        start_page.login_email(data.get_account('sign'),
                               data.get_account('pw'))
        assert start_page.text_display(
            'Incorrect email login or password.'), '已注销账号登陆异常'
Exemple #3
0
 def change_account(account):
     """
     切换登陆账号
     :return:
     """
     home_page.into_system()
     system_page.view_account()
     user_page.logout()
     time.sleep(2)
     start_page.into_login()
     start_page.select_country('login', data.get_country(account))
     start_page.login_email(data.get_account(account),
                            data.get_account('pw'))
     start_page.loading(10)
Exemple #4
0
    def test_white_bulbs_share_email(self, check_account, delete_refuse_share_account):
        """
        灯泡球分享给未注册的账号:
        1. 点击灯泡球进入扫地机主页,点击 more进入设置界面,点击share setting进入分享列表
        2. 点击 add 按钮进入添加界面,输入分享账号:[email protected]并提交
        【checkpoint】 分享邀请发送成功,弹窗提示:Successed to share
        【checkpoint】页面返回到分享列表并显示分享人,状态为:待确认
        :param check_account:
        :return:
        """

        home_page.into_device_home_page(data.get_device('white_bulbs'))

        TestBulbs.bulbs_ready()

        bulbs_home_page.into_setting()
        bulbs_setting_page.into_share()
        share_setting_page.add_share()
        share_setting_page.commit_share(data.get_account('share'))

        assert share_setting_page.share_result(), 'bulbs正确账号分享失败'
        share_setting_page.ok
        share_setting_page.loading()
        status = share_setting_page.read_share_status(data.get_username('share'))
        assert status == 'Awaiting Confirmation' or status == 'Pending Confirmation', '分享列表被分享者状态显示错误'
    def test_switch_agree_share(self, check_account, delete_share_news):
        """
        智能开关被分享者接受分享:
        1. 登陆账号[email protected]/12345678
        【checkpoint】登陆账号为[email protected]
        2. 点击进入侧边栏界面
        【checkpoint】消息通知显示分享通知红点标识
        3. 点击news进入消息界面
        【checkpoint】显示分享邀请消息记录
        4. 点击最新一条分享邀请通知,点击ok按钮
        【checkpoint】点击ok按钮弹窗提示分享成功
        :param check_account:
        :return:
        """
        home_page.into_device_home_page(data.get_device('switch'))

        TestSwitch.switch_ready()

        switch_home_page.into_setting()
        switch_setting_page.into_share()

        status = share_setting_page.read_share_status(
            data.get_username('share'))
        if status not in ['Awaiting Confirmation', 'Pending Confirmation']:
            share_setting_page.add_share()
            share_setting_page.commit_share(data.get_account('share'))
            assert share_setting_page.share_result(
            ), 'switch 正确账号分享失败,无法执行用例:[test_bulbs_agree_share]'
            share_setting_page.ok
            share_setting_page.loading()

        share_setting_page.back_setting()
        switch_setting_page.back_switch()
        switch_home_page.back_home()
        TestSwitch.change_account('share')
        home_page.into_system()

        system_page.into_sharing()
        assert all_share_page.text_display(
            data.get_device('switch')), '被分享列表未显示分享设备信息'
        GlobalVar.set_test_flag('t')  # 到这里后需要执行 tear_down
        all_share_page.into_device(data.get_device('switch'))
        all_share_page.yes
        all_share_page.loading()

        assert all_share_page.text_display(
            'Request Accepted. You may now use this device.'), '被分享者确认接受分享失败'
        all_share_page.ok
        assert all_share_page.text_display(
            'switch shared a ' +
            data.get_device('switch').strip()), '被分享者显示的分享设备名称错误'

        news_page.back_system()
        news_page.back_system()
        system_page.back_home()
        home_page.swipe_page('down')
        assert home_page.find_device(
            data.get_device('switch')), '被分享者未显示分享的switch设备'
 def test_login_email_success(self, not_login):
     """
     输入正确邮箱及正确的邮箱密码可正常登陆:
     1. 进入注册页面,国家选择UK
     【checkpoint】区域=UK
     2. 输入账号:YI@aaa. com,密码:12345678,点击登录
     【checkpoint】登陆成功进入app,显示welcome
     3.进入用户中心界面
     【checkpoint】用户中心账号为:YI@aaa. com
     """
     start_page.into_login()
     start_page.select_country('login', data.get_country('email'))
     assert start_page.check_country(data.get_country('email'))
     start_page.login_email(data.get_account('share'),
                            data.get_account('pw'))
     assert home_page.is_welcome(), '登陆失败,未进入app主页'
     home_page.into_system()
     system_page.view_account()
     assert user_page.is_user_id(data.get_account('share')), '邮箱登陆后账号显示错误'
 def test_login_phone_success(self, not_login):
     """
     输入正确手机号及正确的手机密码可正常登陆:
     1. 进入登陆页面,国家选择中国
     【checkpoint】区域=中国
     2. 输入账号:13534173939,密码:12345678,点击登录
     【checkpoint】登陆成功进入app首页
     3.进入用户中心界面
     【checkpoint】用户中心账号为:13534173939
     """
     start_page.into_login()
     start_page.select_country('login', data.get_country('phone'))
     assert start_page.check_country(
         data.get_country('phone')), '账号登录国家选择错误'
     start_page.login_phone(
         data.get_account('phone'),
         data.get_account('pw'))  # data.get_account('pw')
     assert home_page.is_welcome(), '登陆失败,未进入app主页'
     home_page.into_system()
     system_page.view_account()
     assert user_page.is_user_id(data.get_account('phone')), '手机登陆后账号显示错误'
    def test_switch_refuse_share(self, delete_share_news, check_account,
                                 delete_refuse_share_account):
        """
        智能开关被分享者拒绝接受分享:
        1. 点击智能开关进入扫地机主页,点击 more进入设置界面,点击share setting进入分享列表
        2. 点击 add 按钮进入添加界面,输入分享账号:[email protected]并提交
        【checkpoint】 分享邀请发送成功,弹窗提示:Successed to share
        3.重启app切换账号[email protected],进入分享消息记录
        4.点击拒绝接受分享按钮
        【checkpoint】显示已拒绝分享弹窗
        【chenckpoint】app首页不显示分享设备
        5.切换至分享者账号,检查分享列表
        【checkpoint】不显示已拒绝的分享人
        :param check_account:
        :return:
        """
        home_page.into_device_home_page(data.get_device('switch'))

        TestSwitch.switch_ready()

        switch_home_page.into_setting()
        switch_setting_page.into_share()
        share_setting_page.add_share()
        share_setting_page.commit_share(data.get_account('refuseshare'))
        assert share_setting_page.share_result(), 'switch 正确账号分享失败'
        share_setting_page.ok
        share_setting_page.loading()

        share_setting_page.back_setting()
        switch_setting_page.back_switch()
        switch_home_page.back_home()

        TestSwitch.change_account('refuseshare')
        GlobalVar.set_test_flag('t')

        home_page.into_system()
        system_page.into_sharing()
        all_share_page.into_device(data.get_device('switch'))
        all_share_page.no
        assert all_share_page.text_display(
            'Request Declined. This device will be removed.'
        ), 'switch 被分享者拒绝接受分享失败'
        all_share_page.ok
        all_share_page.loading()

        all_share_page.back_system()
        system_page.back_home()
        home_page.swipe_page('down')
        assert home_page.find_device(
            data.get_device('switch')) is False, 'app首页被分享者拒绝分享后显示分享了扫地机设备'
    def test_change_password_success(self, old_pw, new_pw, check_account):
        """
        新旧密码均满足要求修改成功:
        1. 进入用户中心,点击 changge password
        2. 输入正确当前密码:12345678,新密码:11111111,点击提交修改
        【checkpoint】toast提示密码修改成功:Your Password has been successfully changed.
        【checkpoint】 成功返回用户中心页面
        """
        home_page.into_system()
        system_page.view_account()
        user_page.into_change_pw()
        change_pw_page.change_pw(old_pw, new_pw)

        assert user_page.is_user_id(data.get_account('sign')), '用户修改密码失败'
class TestAPP(object):
    @pytest.fixture(scope='function')
    def init_setup(self):

        global base_page, start_page, user_page, time_zone_page, system_page, news_page, change_pw_page, home_page, \
            all_share_page, share_setting_page, add_device_page, device_help_page, help_faq_page, language_page

        GlobalVar.set_test_flag('f')

        base_page = BasePage(self.driver)
        start_page = StartPage(self.driver)
        home_page = HomePage(self.driver)
        user_page = UserPage(self.driver)
        time_zone_page = TimeZonePage(self.driver)
        system_page = SystemPage(self.driver)
        news_page = NewsPage(self.driver)
        change_pw_page = ChangePWPage(self.driver)
        all_share_page = AllSharePage(self.driver)
        share_setting_page = ShareSettingPage(self.driver)
        add_device_page = AddDevicePage(self.driver)
        device_help_page = DeviceHelpPage(self.driver)
        help_faq_page = HelpFAQPage(self.driver)
        language_page = LanguagePage(self.driver)

        # 检查ios升级弹窗
        try:
            start_page.ignore_ios_update()
        except Exception as e:
            print('升级弹窗处理失败:\n' + e)

    @staticmethod
    def change_account(account):
        """
        切换登陆账号
        :return:
        """
        home_page.into_system()
        system_page.view_account()
        user_page.logout()
        time.sleep(2)
        start_page.into_login()
        start_page.select_country('login', data.get_country(account))
        start_page.login_email(data.get_account(account),
                               data.get_account('pw'))
        start_page.loading(10)

    @pytest.fixture(scope='function')
    def is_login(self, init_setup):
        """
        检查并返回登陆状态
        :return:
        """
        return home_page.is_welcome()

    @pytest.fixture(scope='function')
    def not_login(self, init_setup):
        """
        不登陆,如果登陆则退出登录
        :return:
        """
        if home_page.is_welcome():
            home_page.into_system()
            system_page.view_account()
            user_page.logout()

    @pytest.fixture(scope='function')
    def check_account(self, request, init_setup):
        """
        校验当前登陆账号是否正确,不正确则自动切换
        调用的函数需要传参:
        @pytest.mark.parametrize('switch_account', ['robotic'], indirect=True)
        :param init_setup:
        :param request:
        :return:
        """
        account = request.param
        if home_page.is_welcome() is False:
            start_page.into_login()
            if account is not None:
                start_page.select_country('login', data.get_country(account))
                start_page.login_email(data.get_account(account),
                                       data.get_account('pw'))
            else:
                raise BaseException('登陆账号为空')
        else:
            if data.get_username(account) in home_page.read_username():
                return
            if account is not None:
                TestAPP.change_account(account)
            else:
                raise BaseException('登陆账号为空')

    @pytest.fixture(scope='function')
    def logout(self):
        """
        后置操作,退出登录
        首页》侧边栏》用户中心
        :return:
        """
        yield 1
        base_page.kill_app()
        base_page.open_app()
        if home_page.is_welcome():
            home_page.into_system()
            system_page.view_account()
            user_page.logout()

    @pytest.mark.run(order=1)
    @pytest.mark.app
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    @pytest.mark.parametrize('username,password,expect', [
        ('*****@*****.**', '12345678', 'This email address is already registered'),
        ('*****@*****.**', '123456', 'Your password must be 8-20 characters long')
    ])
    def test_sign_error_param(self, username, password, expect, not_login):
        """
        使用已注册的邮箱不能注册:  init_setup
        1. 点击 Sign Up,进入注册页面
        2. 选择地区:UK,输入邮箱:[email protected],默认密码:12345678,点击Sign Up按钮提交注册
        【checkpoint】弹窗提示邮箱[email protected]已注册【This email adress is already registered . . . 】
        密码不符合规范不能注册:
        1. 点击 Sign Up,进入注册页面
        2. 输入邮箱:[email protected],密码:123456,点击Sign Up按钮提交注册
        【checkpoint】注册失败,文案提示:Your password must be 8-20 characters long.
        """
        country = data.get_country('email')
        if start_page.platform != 'ios':
            start_page.login_back()
        start_page.into_sign()
        start_page.select_country('sign', country)
        start_page.sign_email(country, username, password)
        assert start_page.text_display(expect), '错误提示信息不对'

    @pytest.mark.app
    @pytest.mark.run(order=2)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    @pytest.mark.parametrize(
        'username,password',
        [(data.get_account('sign'), data.get_account('pw'))])
    def test_sign_success(self, username, password, not_login):
        """
        输入未注册的邮箱及正确的密码可注册成功:
        1. 点击 Sign Up,进入注册页面
        2. 输入密码Yi@a. com,密码:12345678,点击SignUp按住提交注册
        【checkpoint】注册成功进入app,显示 welcome
        【checkpoint】检查当前登陆账号是否为:[email protected]
        """
        country = data.get_country('email')
        if start_page.platform != 'ios':
            start_page.login_back()
        start_page.into_sign()
        start_page.select_country('sign', country)
        start_page.sign_email(country, username, password)

        assert home_page.is_welcome(), '注册后未进入APP首页'
        home_page.into_system()
        system_page.view_account()
        assert user_page.is_user_id(username), '登陆账号与注册账号不一致'

    @pytest.mark.app
    @pytest.mark.run(order=3)
    @pytest.mark.parametrize('check_account', ['sign'], indirect=True)
    @pytest.mark.parametrize(
        'old_pw,new_pw,expect',
        [('1111111111', '11111111', 'The password you entered is incorrect.'),
         (data.get_account('pw'), '111111',
          'Your password must be 8-20 characters long.')])
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_change_error_password(self, old_pw, new_pw, expect,
                                   check_account):
        """
        当前密码输入错误不能修改:
        1. 进入用户中心,点击 changge password
        2. 输入错误当前密码:11111111,新密码:11111111,点击提交修改
        【checkpoint】文本提示当前密码错误:The password you entered is incorrect.
        1. 进入用户中心,点击 changge password
        2. 输入正确当前密码:00000000,新密码:111111,点击提交修改
        【checkpoint】注册失败,文案提示:Your password must be 8-20 characters long.
        新密码不符合要求不能修改:
        """
        home_page.into_system()
        system_page.view_account()
        user_page.into_change_pw()
        change_pw_page.change_pw(old_pw, new_pw)
        assert change_pw_page.text_display(expect), '错误提示信息显示不对'

    @pytest.mark.app
    @pytest.mark.run(order=4)
    @pytest.mark.parametrize('check_account', ['sign'], indirect=True)
    @pytest.mark.parametrize(
        'old_pw,new_pw', [(data.get_account('pw'), data.get_account('npw'))])
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_change_password_success(self, old_pw, new_pw, check_account):
        """
        新旧密码均满足要求修改成功:
        1. 进入用户中心,点击 changge password
        2. 输入正确当前密码:12345678,新密码:11111111,点击提交修改
        【checkpoint】toast提示密码修改成功:Your Password has been successfully changed.
        【checkpoint】 成功返回用户中心页面
        """
        home_page.into_system()
        system_page.view_account()
        user_page.into_change_pw()
        change_pw_page.change_pw(old_pw, new_pw)

        assert user_page.is_user_id(data.get_account('sign')), '用户修改密码失败'

    @pytest.mark.app
    @pytest.mark.run(order=5)
    @pytest.mark.parametrize('check_account', ['sign'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_change_username(self, check_account):
        """
        修改当前用户昵称:
        1. 进入用户中心个人信息页面,将用户昵称修改为AA,点击保存
        【checkpoint】用户中心昵称变更为AA
        2.点击返回回到侧边栏
        【checkpoint】用户昵称变更为AA
        3.点击返回回到app首页
        【checkpoint】用户昵称变更为AA
        """
        home_page.into_system()
        system_page.view_account()
        _id = user_page.get_str()
        user_page.change_name('sign' + _id)
        assert user_page.is_user_name('sign' + _id), '用户中心昵称显示错误'
        user_page.back_system()
        assert system_page.read_account() == 'sign' + _id, '侧边栏昵称显示错误'
        system_page.back_home()
        assert home_page.read_username() == 'sign' + _id, 'app主页昵称显示错误'

    @pytest.fixture(scope='function')
    def set_default_english(self):
        """
        设置app默认语言为英语
        :return:
        """
        yield 1
        system_page.into_language()
        language_page.swipe_page('down')
        language_page.select_language('English')

    @pytest.mark.app
    @pytest.mark.run(order=6)
    @pytest.mark.parametrize('check_account', ['sign'], indirect=True)
    def change_app_language(self, check_account, set_default_english):
        """
        切换app语言包:
        1.便利切换语言包,退出然后校验语言选项标题是否切换正确
        :return:
        """
        home_page.into_system()
        lan = language_page.get_language()
        f = []

        for l in lan:
            time.sleep(2)
            system_page.into_language()
            language_page.select_language(l)
            time.sleep(2)

            now_lan = system_page.read_language()
            if language_page.get_language(l) not in now_lan:
                f.append(l)

        assert len(f) == 0, '语言遍历切换异常,校验错误语种:' + str(f)

    @pytest.mark.app
    @pytest.mark.run(order=7)
    @pytest.mark.parametrize('check_account', ['sign'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_delete_account(self, check_account):
        """
        正常删除账户:
        1. 进入用户中心,点击 delete account
        2.点击 delete按钮
        【checkpoint】弹出确认弹窗:Are you sure you want to delete this account?
        3.点击 ok按钮
        【checkpoint】检查是否回到登陆页面(安卓和ios页面不一样)
        """
        home_page.into_system()
        system_page.view_account()
        user_page.delete_account()
        assert user_page.delete_account_window(
        ) == 'Are you sure you want to delete this account?', '未显示删除账号确认弹窗'
        if user_page.platform == 'ios':
            user_page.yes
        else:
            user_page.ok
        assert start_page.is_start_page(), '未返回到登陆界面'

        start_page.into_login()
        start_page.login_email(data.get_account('sign'),
                               data.get_account('pw'))
        assert start_page.text_display(
            'Incorrect email login or password.'), '已注销账号登陆异常'

    @pytest.mark.app
    @pytest.mark.run(order=8)
    @pytest.mark.parametrize(
        'phone,pw,expect',
        [('135341739', '12345678', 'Incorrect phone number format'),
         ('13534173939', '12345789', 'Incorrect email login or password')])
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_login_error_phone(self, phone, pw, expect, not_login):
        """
        输入错误手机号不能登陆:
        1. 进入登陆页面,国家选择中国
        【checkpoint】区域=中国
        2.输入错误账号:135341739,密码:12345678,点击登录
        【checkpoint】登陆失败,toast提示手机号错误:incorrect phone number format.
        输入错误密码不能登陆:
        1. 进入注册页面,国家选择中国
        【checkpoint】区域=中国
        2. 输入账号:13534173939,错误密码:123456,点击登录
        【checkpoint】登陆失败,toast提示密码错误:Incorrect email login or password
        """
        start_page.into_login()
        start_page.select_country('login', data.get_country('phone'))
        assert start_page.check_country(
            data.get_country('phone')), '账号登录国家选择错误'
        start_page.login_phone(phone, pw)
        if start_page.platform == 'ios':
            assert start_page.is_toast_exist(expect, True,
                                             True), '错误手机号/密码登陆的提示信息错误'
        else:
            assert start_page.text_display(expect), '错误手机号/密码登陆的提示信息错误'

    @pytest.mark.app
    @pytest.mark.run(order=9)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_login_phone_success(self, not_login):
        """
        输入正确手机号及正确的手机密码可正常登陆:
        1. 进入登陆页面,国家选择中国
        【checkpoint】区域=中国
        2. 输入账号:13534173939,密码:12345678,点击登录
        【checkpoint】登陆成功进入app首页
        3.进入用户中心界面
        【checkpoint】用户中心账号为:13534173939
        """
        start_page.into_login()
        start_page.select_country('login', data.get_country('phone'))
        assert start_page.check_country(
            data.get_country('phone')), '账号登录国家选择错误'
        start_page.login_phone(
            data.get_account('phone'),
            data.get_account('pw'))  # data.get_account('pw')
        assert home_page.is_welcome(), '登陆失败,未进入app主页'
        home_page.into_system()
        system_page.view_account()
        assert user_page.is_user_id(data.get_account('phone')), '手机登陆后账号显示错误'

    @pytest.mark.app
    @pytest.mark.run(order=10)
    @pytest.mark.parametrize(
        'email,pw,expect',
        [('test@test', '12345678', 'Please enter a valid email address'),
         ('*****@*****.**', '987654321',
          'Incorrect email login or password. Please try again.')])
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_login_error_email(self, email, pw, expect, not_login):
        """
        输入错误邮箱不能登陆:
        1. 进入注册页面,国家选择UK
        【checkpoint】区域=UK
        2. 输入账号:[email protected],错误密码:123456,点击登录
        【checkpoint】登陆失败,文本提密码错误:Please enter a valid email address (Example: [email protected]).
        输入错误密码不能登陆:
        1. 进入注册页面,国家选择UK
        【checkpoint】区域=UK
        2. 输入账号:[email protected],错误密码:123456,点击登录
        【checkpoint】登陆失败,文本提密码错误:Incorrect email login or password. Please try again.
        """
        start_page.into_login()
        start_page.select_country('login', data.get_country('email'))
        assert start_page.check_country(data.get_country('email'))
        start_page.login_email(email, pw)
        assert start_page.text_display(expect), '错误邮箱/密码登陆提示信息错误'

    @pytest.mark.app
    @pytest.mark.run(order=11)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_login_email_success(self, not_login):
        """
        输入正确邮箱及正确的邮箱密码可正常登陆:
        1. 进入注册页面,国家选择UK
        【checkpoint】区域=UK
        2. 输入账号:YI@aaa. com,密码:12345678,点击登录
        【checkpoint】登陆成功进入app,显示welcome
        3.进入用户中心界面
        【checkpoint】用户中心账号为:YI@aaa. com
        """
        start_page.into_login()
        start_page.select_country('login', data.get_country('email'))
        assert start_page.check_country(data.get_country('email'))
        start_page.login_email(data.get_account('share'),
                               data.get_account('pw'))
        assert home_page.is_welcome(), '登陆失败,未进入app主页'
        home_page.into_system()
        system_page.view_account()
        assert user_page.is_user_id(data.get_account('share')), '邮箱登陆后账号显示错误'

    @pytest.mark.app
    @pytest.mark.run(order=12)
    @pytest.mark.parametrize('check_account', ['share'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_change_timezone(self, check_account):
        """
        检查是否可以切换时区: 【ios的定位有问题】
        1. 点击timezone进入时区列表界面
        #【checkpoint】默认选择香港时区 (考虑到用例可能失败,无法保证默认值,故去掉此验证)
        2.选择北京时区,退出时区界面再次进入
        【checkpoint】当前选择时区变更为北京
        """
        home_page.into_system()
        system_page.into_timezone()
        flag = time_zone_page.is_beijing()
        if flag:
            time_zone_page.select_timezone('beijing')
        else:
            time_zone_page.select_timezone('hongkong')
        time_zone_page.back_system()
        system_page.into_timezone()
        if flag:
            assert time_zone_page.is_beijing(), '时区切换失败'
        else:
            assert time_zone_page.is_hongkong(), '时区切换失败'

    @pytest.mark.app
    @pytest.mark.run(order=13)
    @pytest.mark.parametrize('check_account', ['share'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_count_timezone(self, check_account):
        """
        检查时区总数:
        1. 点击timezone进入时区列表界面,将列表滑动到第一个
        【checkpoint】检查第一个是否为 Midway island,Samoa
        2. 滑动列表统计时区总数
        【checkpoint】时区总数=76
        """
        home_page.into_system()
        system_page.into_timezone()
        if time_zone_page.platform == 'android':
            time_zone_page.move_top()

        assert len(time_zone_page.read_time_list()) == 76, '时区列表总数错误'

    @pytest.mark.app
    @pytest.mark.run(order=14)
    @pytest.mark.parametrize('check_account', ['share'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def faq_list(self, check_account):
        """
        首页进入检查help设备类别显示是否正常:
        1. 点击app主页入口进入FAQ页面,遍历所有设备名称
        【checkpoint】查看所有设别类型是否全部显示
        侧边栏help能进入FAQ(检查入口):
        1. 进入侧边栏,点击help进入FAQ界面
        【checkpoint】检查FAQ模块是否存在
        """
        home_page.into_help()
        products = help_faq_page.read_product_list()
        faq_list = eval(data.get_faq('product'))
        flag1 = len(products) == len(faq_list)
        _faq = ''
        for faq in faq_list:
            if faq not in products:
                _faq = _faq + ',' + faq
        assert flag1 and len(_faq) == 0, 'FAQ列表的设备显示不全,缺少:' + _faq

    @pytest.mark.debug
    @pytest.mark.run(order=15)
    @pytest.mark.parametrize('check_account', ['share'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def Help_Page(self, check_account):
        """
        侧边栏help能进入FAQ(检查入口):
        1. 进入侧边栏,点击help进入FAQ界面
        【checkpoint】检查FAQ页面标题
        :param check_account:
        :return:
        """
        home_page.into_system()
        system_page.into_help()
        assert help_faq_page.is_faq_page(), 'Help页面进入失败'

    @pytest.mark.app
    @pytest.mark.run(order=16)
    @pytest.mark.parametrize('check_account', ['share'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def devices_list(self, check_account):
        """
        添加设备列表的扫地机设备类别:
        1. 点击app主页添加按钮进入设备类型界面
        【checkpoint】共有五种设备类型
        2. 点击扫地机进入扫地机列表,遍历扫地机类别
        【checkpoint】共有11款扫地机
        """
        home_page.click_add_device()

        device_type = add_device_page.read_device_type()
        flag1 = True
        device_text = ''
        add_device_page.add_check_image('设备种类')
        for ele1 in data.get_device_type('device_type'):
            if ele1 not in device_type:
                flag1 = False
                device_text = ele1 + ';' + device_text
        add_device_page.add_check_image('设备类型')
        add_device_page.click_robotic()

        robotic_type = add_device_page.read_robotic_list()
        flag2 = True
        robotic_text = ''
        for ele2 in data.get_device_type('robotic_type'):
            if ele2 not in robotic_type:
                flag2 = False
                robotic_text = ele2 + ';' + robotic_text

        assert flag1 and flag2, '设备类型缺失:' + device_text + ' & 扫地机类型缺失:' + robotic_text

    @pytest.mark.app
    @pytest.mark.run(order=17)
    @pytest.mark.parametrize('check_account', ['share'], indirect=True)
    @pytest.mark.flaky(reruns=1, reruns_delay=20)
    def test_logout(self, check_account):
        """
        正常退出登录:
        1. 进入个人中心界面,点击sign out按钮
        【checkpoint】显示退出确认弹窗
        2.点击 ok 按钮
        【checkpoint】回到登陆界面:安卓显示账号密码输入框,ios显示登陆注册入口
        """
        home_page.into_system()
        system_page.view_account()
        user_page.click_logout()
        assert user_page.is_logout_window(), '未显示退出登陆确认弹窗'
        if user_page.platform == 'ios':
            user_page.yes
        else:
            user_page.ok
        assert start_page.logout_back_page(), '退出登录未回到登陆界面'