示例#1
0
class UserLogin:
    def __init__(self):
        self.hjt_windows = HexmeetWindowSingleton().getHexmeetWindow()
        self.login_windows = auto.WindowControl(
            searchDepth=1, ClassName="ev_app::views::CLoginDlg")
        self.login_page = self.login_windows.CustomControl(
            searchDepth=1, AutomationId="CLoginDlg.m_pStackedWgtContent")

    def go_to_login_page(self):
        self.hjt_windows.GroupControl(searchDepth=1, AutomationId="CHomeDlg.m_pWgtOperationBar")\
            .ImageControl(searchDepth=3, AutomationId="CHomeDlg.m_pWgtOperationBar.m_pWgtLoginUserInfo.horizontalWidget.m_pLblAvatar").Click()
        self.hjt_windows.WindowControl(
            searchDepth=1,
            ClassName="ev_app::views::CMyInfoDlg").ButtonControl(
                searchDepth=2, Name="退出登录").Click()

    def fill_in_server_address(self, server_address):
        server_address_edit = self.login_page.EditControl(
            searchDepth=3,
            AutomationId=
            "CLoginDlg.m_pStackedWgtContent.CLoginInfoForm.verticalWidget_3.m_pEditServer"
        )
        server_address_edit.SendKeys("{BACK}" * 40)
        server_address_edit.SendKeys(server_address)

    def fill_in_account(self, accout):
        accout_edit = self.login_page.EditControl(
            searchDepth=3,
            AutomationId=
            "CLoginDlg.m_pStackedWgtContent.CLoginInfoForm.verticalWidget_4.m_pEditAccount"
        )
        accout_edit.SendKeys("{BACK}" * 40)
        accout_edit.SendKeys(accout)

    def fill_in_password(self, password):
        password_edit = self.login_page.EditControl(
            searchDepth=3,
            AutomationId=
            "CLoginDlg.m_pStackedWgtContent.CLoginInfoForm.verticalWidget_5.m_pEditPassword"
        )
        password_edit.SendKeys("{BACK}" * 40)
        password_edit.SendKeys(password)

    def user_login_commit(self):
        self.login_page.ButtonControl(searchDepth=3, Name="登录").Click()

    def login_fail_commit(self):
        self.login_windows.WindowControl(
            searchDepth=1, ClassName="ev_app::views::AlertDlg").ButtonControl(
                searchDepth=3, Name="确定").Click()
class AppVersion:
    def __init__(self):
        self.hexMeetHJTWindow = HexmeetWindowSingleton().getHexmeetWindow()
        self.app_setting = AppSetting()

    def getAppVersion(self):
        self.app_setting.go_to_setting_page()
        sleep(1)
        setting_form_page = self.hexMeetHJTWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtContext").GroupControl(
                searchDepth=2,
                AutomationId=
                "CHomeDlg.m_pWgtContext.m_pStackedWgtContent.CSettingsForm")
        setting_form_page.ListItemControl(searchDepth=3, Name="关于").Click()
        sleep(1)
        version = setting_form_page.TextControl(
            searchDepth=7,
            AutomationId=
            "CHomeDlg.m_pWgtContext.m_pStackedWgtContent.CSettingsForm.twgtSettingsPages.qt_tabwidget_stackedwidget.tabSettingsAbout.scrollArea.qt_scrollarea_viewport.scrollAreaWidgetContents.m_pLabVersion"
        ).Name
        return version.split(":", 1)[1]
class UnRegisterCall:
    def __init__(self):
        self.hjt_windows = HexmeetWindowSingleton().getHexmeetWindow()
        self.login_windows = auto.WindowControl(
            searchDepth=1, ClassName="ev_app::views::CLoginDlg")
        self.login_page = self.login_windows.CustomControl(
            searchDepth=1, AutomationId="CLoginDlg.m_pStackedWgtContent")

    def go_to_unregister_call_page(self):
        self.hjt_windows.GroupControl(searchDepth=1, AutomationId="CHomeDlg.m_pWgtOperationBar") \
            .ImageControl(searchDepth=3, AutomationId="CHomeDlg.m_pWgtOperationBar.m_pWgtLoginUserInfo.horizontalWidget.m_pLblAvatar").Click()
        self.hjt_windows.WindowControl(
            searchDepth=1,
            ClassName="ev_app::views::CMyInfoDlg").ButtonControl(
                searchDepth=2, Name="退出登录").Click()
        self.login_windows.ButtonControl(searchDepth=2, Name="返回").Click()
        self.login_page.ButtonControl(searchDepth=3, Name="加入会议").Click()

    def fill_in_server_address(self, server_address):
        server_address_edit = self.login_page.EditControl(
            searchDepth=3,
            AutomationId=
            "CLoginDlg.m_pStackedWgtContent.CLoginJoinConfForm.verticalWidget.m_pEditServer"
        )
        server_address_edit.SendKeys("{BACK}" * 40)
        server_address_edit.SendKeys(server_address)

    def fill_in_conference_id(self, conference_id):
        """暂时改变不了值"""
        self.login_windows.TextControl(searchDepth=2, Name="加入会议").Click()
        x, y = auto.GetCursorPos()
        # Normal PC auto.Click(x + 55, y + 95)
        # Hihg DPI
        auto.Click(x + 45, y + 75)
        auto.SendKeys("{BACK}" * 40)
        auto.SendKeys(conference_id)
        # conference_id_edit = self.login_page.ComboBoxControl(searchDepth=3, AutomationId="CLoginDlg.m_pStackedWgtContent.CLoginJoinConfForm.verticalWidget.m_pCmbBoxConfNumber")
        # conference_id_edit.SendKeys("{BACK}" * 40)
        # conference_id_edit.SendKeys(conference_id)

    def append_password(self, password):
        self.login_windows.TextControl(searchDepth=2, Name="加入会议").Click()
        x, y = auto.GetCursorPos()
        # Normal PC auto.Click(x + 55, y + 95)
        # Hihg DPI
        auto.Click(x + 45, y + 75)
        auto.SendKeys(password)

    def fill_in_display_name(self, display_name):
        display_name_edit = self.login_page.EditControl(
            searchDepth=3,
            AutomationId=
            "CLoginDlg.m_pStackedWgtContent.CLoginJoinConfForm.verticalWidget.m_pEditDisplayName"
        )
        display_name_edit.SendKeys("{BACK}" * 40)
        display_name_edit.SendKeys(display_name)

    def fill_in_password(self, password):
        fill_in_password = auto.WindowControl(searchInterval=1, ClassName="ev_app::views::CInputPasswordWidget").GroupControl(searchDepth=1, AutomationId="CInputPasswordWidget.verticalWidget_2") \
            .EditControl(searchDepth=1, AutomationId="CInputPasswordWidget.verticalWidget_2.m_pInputPasswordEdit")
        fill_in_password.Click()
        fill_in_password.SendKeys(password + "{ENTER}")

    def change_microphone_setting(self):
        self.login_page.CheckBoxControl(searchDepth=3, Name="关闭麦克风").Click()

    def change_camera_setting(self):
        self.login_page.CheckBoxControl(searchDepth=3, Name="关闭摄像头").Click()

    def user_join_commit(self):
        self.login_page.ButtonControl(searchDepth=3, Name="加入").Click()

    def login_fail_commit(self):
        self.login_windows.WindowControl(
            searchDepth=1, ClassName="ev_app::views::AlertDlg").ButtonControl(
                searchDepth=3, Name="确定").Click()

    def fill_in_conference_password(self, password):
        auto.WindowControl(searchDepth=1, ClassName="ev_app::views::CInputPasswordWidget").EditControl(searchDepth=2, AutomationId="CInputPasswordWidget.verticalWidget_2.m_pInputPasswordEdit") \
            .SendKeys(password + "{ENTER}")

    def login_from_unregister_call_page(self):
        self.login_windows.ButtonControl(searchDepth=2, Name="返回").Click()
        sleep(1)
        self.login_windows.ButtonControl(searchDepth=4, Name="登录").Click()
        sleep(1)
        self.login_windows.ButtonControl(searchDepth=4, Name="登录").Click()

    def close_hjt(self):
        self.login_windows.GroupControl(
            searchDepth=1,
            AutomationId="CLoginDlg.m_pWgtTitlebar").ButtonControl(
                searchDepth=1,
                AutomationId="CLoginDlg.m_pWgtTitlebar.m_pBtnClose").Click()
class AppSetting:
    def __init__(self):
        self.log = logging.getLogger(__name__)
        self.log.info("AppSetting init --")
        self.hexMeetHJTWindow = HexmeetWindowSingleton().getHexmeetWindow()
        self.setting_page = self.hexMeetHJTWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtContext").GroupControl(
                searchDepth=2,
                AutomationId=
                "CHomeDlg.m_pWgtContext.m_pStackedWgtContent.CSettingsForm")

    def go_to_setting_page(self):
        self.log.info("go_to_setting_page")
        self.hexMeetHJTWindow.GroupControl(
            searchDepth=1,
            AutomationId="CHomeDlg.m_pWgtOperationBar").ListControl(
                searchDepth=2,
                ClassName="ev_app::custom_controls::CHomeMenuListView").Click(
                )
        x, y = auto.GetCursorPos()
        auto.Click(x, y + 70)

    def chang_bandwidth(self, value):
        """
        values are
        384K,512K,768K,1M,1.5M,2M,3M,4M
        """
        self.log.info("chang_bandwidth")
        self.go_to_setting_page()
        sleep(3)
        self.setting_page.TextControl(searchDepth=9, Name="呼叫速率").Click()
        x, y = auto.GetCursorPos()
        auto.Click(x, y + 40)
        self.setting_page.ListItemControl(searchDepth=11, Name=value).Click()

    def chang_language(self, language):
        """
        languages are
        English,简体中文
        """
        self.log.info("chang_language")
        self.go_to_setting_page()
        sleep(3)
        if self.setting_page.TextControl(searchDepth=9, Name="语言").Exists():
            self.setting_page.TextControl(searchDepth=9, Name="语言").Click()
        else:
            self.setting_page.TextControl(searchDepth=9,
                                          Name="Language").Click()

        x, y = auto.GetCursorPos()
        auto.Click(x, y + 40)
        self.setting_page.ListItemControl(searchDepth=11,
                                          Name=language).Click()

    def change_snapshot_path(self):
        self.log.info("change_snapshot_path")
        sleep(3)
        self.go_to_setting_page()
        self.setting_page.ButtonControl(
            searchDepth=9,
            AutomationId=
            "CHomeDlg.m_pWgtContext.m_pStackedWgtContent.CSettingsForm.twgtSettingsPages.qt_tabwidget_stackedwidget"
            ".tabSettingsGeneral.m_pScrollGeneral.qt_scrollarea_viewport.scaSettingsGeneral.scorllGeneralWidght"
            ".m_pWgtSnapshotPathPanel.m_pBtnChangeSnapshotPath").Click()
        sleep(1)
        self.hexMeetHJTWindow.WindowControl(searchDepth=1,
                                            Name="请选择截图文件存放位置:").ButtonControl(
                                                searchDepth=1,
                                                Name="选择文件夹").Click()

    def change_auto_login(self):
        self.log.info("change_auto_login")
        self.go_to_setting_page()
        self.setting_page.CheckBoxControl(searchDepth=9, Name="自动登录").Click()

    def change_auto_answer(self):
        self.log.info("change_auto_answer")
        self.go_to_setting_page()
        self.setting_page.CheckBoxControl(searchDepth=9, Name="自动应答").Click()

    def change_disable_prompt(self):
        self.log.info("change_disable_prompt")
        self.go_to_setting_page()
        self.setting_page.CheckBoxControl(searchDepth=10, Name="关闭提示").Click()

    def change_to_full_mode_meeting(self):
        self.log.info("change_to_full_mode_meeting")
        self.go_to_setting_page()
        self.setting_page.TextControl(searchDepth=9, Name="应用").Click()
        auto.WheelDown(5)
        self.setting_page.CheckBoxControl(searchDepth=9,
                                          Name="进入会议时全屏显示").Click()
        sleep(1)
        self.go_to_setting_page()
示例#5
0
class Contact:
    def __init__(self):
        self.hexMeetWindow = HexmeetWindowSingleton().getHexmeetWindow()
        self.contact_page = self.hexMeetWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtContext")

    def __contact_page_click(self):
        self.hexMeetWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtOperationBar"
        ).ListControl(
            searchDepth=2,
            AutomationId=
            "CHomeDlg.m_pWgtOperationBar.verticalWidget_4.m_pLvMenus").Click()

    def __meeting_page_click(self):
        self.__contact_page_click()
        x, y = auto.GetCursorPos()
        auto.Click(x, y - 70)

    def go_to_contact_organization_page_search(self, name):
        self.__meeting_page_click()
        self.__contact_page_click()
        self.contact_page.RadioButtonControl(searchDepth=11,
                                             Name="组织机构").Click()
        sleep(1)
        self.contact_page.EditControl(searchDepth=11,
                                      Name="请输入名称").SendKeys(name + "{ENTER}")

    def return_from_person_info_page(self):
        log.info("Return from person info page")
        self.contact_page.TextControl(searchDepth=9, Name="用户详情").Click()
        x, y = auto.GetCursorPos()
        auto.Click(x - 302, y)

    def call_from_favorite(self, name, call_type=CallType.Video):
        log.info("call_from_favorite")
        self.__meeting_page_click()
        self.__contact_page_click()
        self.contact_page.TextControl(searchDepth=13, Name=name + " ").Click()
        sleep(1)
        operate_in_meeting = OperateInMeeting()
        if call_type == CallType.Video:
            log.info("Video call")
            self.contact_page.TextControl(searchDepth=11, Name="视频呼叫").Click()
            sleep(20)
            operate_in_meeting.hangup_call()
        else:
            log.info("Audio call")
            self.contact_page.TextControl(searchDepth=11, Name="语音呼叫").Click()
            sleep(20)
            operate_in_meeting.audio_only_hangup()
        # self.return_from_person_info_page()

    def call_from_organization(self, name, call_type=CallType.Video):
        log.info("call_from_organization")
        # 点击会议,再点击通讯录,返回通讯录的原始页面
        self.contact_page.TextControl(searchDepth=12, Name="中创软件测试中心").Click()
        sleep(1)
        operate_in_meeting = OperateInMeeting()
        if call_type == CallType.Video:
            log.info("Video call")
            self.contact_page.TextControl(searchDepth=11, Name="视频呼叫").Click()
            sleep(20)
            operate_in_meeting.hangup_call()
        else:
            log.info("Audio call")
            self.contact_page.TextControl(searchDepth=11, Name="语音呼叫").Click()
            sleep(20)
            operate_in_meeting.audio_only_hangup()
        # self.return_from_person_info_page()

    def click_upgrade_notice(self):
        sleep(2)
        log.info("click OK button")
        try:
            HexmeetWindowSingleton().getHexmeetWindow().GroupControl(
                searchDepth=1,
                AutomationId="CHomeDlg.m_pWgtContext").ButtonControl(
                    searchDepth=8, Name="确定").Click()
        except:
            print()
示例#6
0
class ReserveMeeting:
    def __init__(self):
        self.hexMeetWindow = HexmeetWindowSingleton().getHexmeetWindow()
        self.reserve_meeting_page = self.hexMeetWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtContext")
        self.participants_page = self.reserve_meeting_page.GroupControl(
            searchDepth=2,
            AutomationId=
            "CHomeDlg.m_pWgtContext.m_pStackedWgtContent.CWebBrowserWrapperForm"
        )
        self.join_meeting_page = self.hexMeetWindow.WindowControl(
            searchDepth=1, AutomationId="CHomeDlg.CJoinConfDlg")

    def __start_time_pos(self):
        self.hexMeetWindow.TextControl(searchDepth=10, Name="开始时间").Click()
        return auto.GetCursorPos()

    def __meeting_duration_pos(self):
        self.hexMeetWindow.TextControl(searchDepth=10, Name="会议时长").Click()
        return auto.GetCursorPos()

    def go_to_meeting_page(self):
        log.info("Go to the meeting page")
        self.hexMeetWindow.GroupControl(
            searchDepth=1,
            AutomationId="CHomeDlg.m_pWgtOperationBar").ListControl(
                searchDepth=2,
                ClassName="ev_app::custom_controls::CHomeMenuListView").Click(
                )
        x, y = auto.GetCursorPos()
        # auto.Click(x, y - 70)
        # high DPI
        auto.Click(x, y - 55)
        sleep(4)
        self.click_upgrade_notice()

    def reserve_meeting_from_panel(self):
        log.info("Reserve  meeting from panel")
        self.go_to_meeting_page()
        sleep(2)
        self.hexMeetWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtContext").TextControl(
                searchDepth=9, Name="预约会议").Click()

    def create_now_meeting_from_panel(self):
        log.info("From panel, choose immediate meeting")
        self.go_to_meeting_page()
        sleep(2)
        self.hexMeetWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtContext").TextControl(
                searchDepth=8, Name="立即会议").Click()

    def choose_date(self):
        log.info("Change date")
        x, y = self.__start_time_pos()
        auto.Click(x + 160, y)

    def choose_time(self):
        log.info("Change time")
        x, y = self.__start_time_pos()
        auto.Click(x + 250, y)
        auto.SetCursorPos(x + 250, y + 80)
        auto.WheelDown(3)
        auto.Click(x + 500, y)

    def choose_now(self):
        log.info("Choose now")
        self.participants_page.TextControl(searchDepth=8, Name="现在").Click()

    def choose_duration(self):
        log.info("Change duration")
        x, y = self.__meeting_duration_pos()
        auto.Click(x + 160, y)
        auto.SetCursorPos(x + 120, y + 100)
        auto.WheelDown(3)
        sleep(1)
        auto.Click(x + 500, y)

    def fill_password(self, password):
        log.info("Fill in password:"******"请输入会议密码").SendKeys(password)

    def same_layout(self):
        log.info("Choose same layout")
        self.reserve_meeting_page.TextControl(searchDepth=12,
                                              Name="相同分屏").Click()

    def auto_redial(self):
        log.info("Choose auto redial")
        self.reserve_meeting_page.TextControl(searchDepth=12,
                                              Name="自动重拨").Click()

    def mute_after_join(self):
        log.info("choose mute after join")
        self.reserve_meeting_page.TextControl(searchDepth=12,
                                              Name="入会自动静音").Click()

    def fill_meeting_notes(self, note):
        log.info("Fill in the meeting notes")
        self.reserve_meeting_page.EditControl(searchDepth=11,
                                              Name="请输入会议备注").SendKeys(note)

    def choose_favorite_contact(self):
        log.info("Choose favorite contact")
        self.reserve_meeting_page.TextControl(searchDepth=7,
                                              Name="添加与会者(0)").Click()
        self.reserve_meeting_page.TextControl(searchDepth=10,
                                              Name=favorite_user).Click()
        self.reserve_meeting_page.TextControl(searchDepth=8, Name="确定").Click()

    def choose_participants(self, name):
        log.info("Find a participant")
        self.reserve_meeting_page.TextControl(searchDepth=7,
                                              Name="添加与会者(0)").Click()
        self.participants_page.RadioButtonControl(searchDepth=8,
                                                  Name="组织机构").Click()
        self.participants_page.EditControl(
            searchDepth=11, Name="请输入名称").SendKeys(name + "{ENTER}")
        sleep(1)
        self.participants_page.TextControl(searchDepth=10,
                                           Name="中创软件测试中心").Click()
        sleep(1)
        self.participants_page.TextControl(searchDepth=6, Name="确定").Click()

    def reserve_confirm(self):
        log.info("Confirm reservation")
        self.participants_page.ButtonControl(searchDepth=5, Name="确定").Click()

    def delete_reserve_meeting(self):
        log.info("Delete the reserved meeting")
        self.reserve_meeting_page.CustomControl(searchDepth=12,
                                                Name="会议详情").Click()
        self.reserve_meeting_page.TextControl(searchDepth=10,
                                              Name="删除会议").Click()
        self.reserve_meeting_page.ButtonControl(searchDepth=7,
                                                Name="确认 ").Click()
        sleep(2)

    def edit_reserve_meeting(self):
        log.info("Edit the reserved meeting")
        self.participants_page.TextControl(searchDepth=10, Name="编辑会议").Click()
        sleep(1)
        self.participants_page.ButtonControl(searchDepth=5, Name="确定").Click()

    def return_from_reserve_meeting(self):
        """无法取得返回的控件,只能通过像素点"""
        log.info("Go back the main reserve meeting page")
        self.participants_page.TextControl(searchDepth=7,
                                           Name="会议基本信息:").Click()
        x, y = auto.GetCursorPos()
        auto.Click(x - 60, y - 60)

    def terminate_now_meeting(self):
        log.info("Terminate the meeting")
        self.click_upgrade_notice()
        self.participants_page.CustomControl(searchDepth=10,
                                             Name="结束会议").Click()
        sleep(1)
        self.reserve_meeting_page.ButtonControl(searchDepth=7,
                                                Name="确认 ").Click()

    def create_a_now_meeting_and_join(self):
        log.info("Create an immediate meeting and join")
        self.go_to_meeting_page()
        self.reserve_meeting_page.TextControl(searchDepth=8,
                                              Name="立即会议").Click()
        sleep(3)
        self.reserve_confirm()
        sleep(15)
        self.return_from_reserve_meeting()
        JoinAMeeting().join_now_meeting_from_reserved_item()

    def meeting_control_after_create(self):
        log.info("Go to meeting control")
        self.participants_page.TextControl(searchDepth=8, Name="进入会控").Click()

    def meeting_control_from_panel(self):
        log.info("Go to meeting control from panel")
        self.participants_page.CustomControl(searchDepth=10,
                                             Name="控制会议").Click()

    def clear_reserved_meeting(self):
        log.info("Cleared un_deleted meetings")
        self.click_upgrade_notice()
        while self.reserve_meeting_page.CustomControl(searchDepth=12,
                                                      Name="会议详情").Exists(1):
            self.reserve_meeting_page.CustomControl(searchDepth=12,
                                                    Name="会议详情").Click()
            sleep(2)
            if self.reserve_meeting_page.TextControl(searchDepth=11,
                                                     Name="结束会议").Exists(1):
                self.reserve_meeting_page.TextControl(searchDepth=11,
                                                      Name="结束会议").Click()
            if self.reserve_meeting_page.TextControl(searchDepth=11,
                                                     Name="删除会议").Exists(1):
                self.reserve_meeting_page.TextControl(searchDepth=11,
                                                      Name="删除会议").Click()
            self.reserve_meeting_page.ButtonControl(searchDepth=8,
                                                    Name="确认 ").Click()
            sleep(3)

    def invite_others_control_now_meeting(self, name):
        sleep(1)
        self.reserve_meeting_page.ButtonControl(searchDepth=8,
                                                Name="邀请").Click()
        sleep(1)
        self.reserve_meeting_page.EditControl(searchDepth=11,
                                              Name="输入用户/终端名称").SendKeys(name)
        sleep(1)
        self.reserve_meeting_page.ButtonControl(searchDepth=7,
                                                Name="< 返回").Click()
        sleep(1)
        self.reserve_meeting_page.ButtonControl(searchDepth=7,
                                                Name="< 返回").Click()

    def click_upgrade_notice(self):
        sleep(5)
        log.info("click OK button")
        try:
            HexmeetWindowSingleton().getHexmeetWindow().GroupControl(
                searchDepth=1,
                AutomationId="CHomeDlg.m_pWgtContext").ButtonControl(
                    searchDepth=8, Name="确定").Click()
        except:
            print("")
class JoinAMeeting:
    def __init__(self):
        # print("__init__")
        self.hexMeetWindow = HexmeetWindowSingleton().getHexmeetWindow()

    def go_to_meeting_page(self):
        log.info("Go to the meeting page")
        self.hexMeetWindow.GroupControl(
            searchDepth=1,
            AutomationId="CHomeDlg.m_pWgtOperationBar").ListControl(
                searchDepth=2,
                ClassName="ev_app::custom_controls::CHomeMenuListView").Click(
                )
        x, y = auto.GetCursorPos()
        auto.Click(x, y - 70)

    def mute_mic(self, micstatus=MicStatus.MUTE):
        log.info("Mute Umute the Miccrophone")
        join_window = auto.WindowControl(
            searchDepth=1, ClassName="ev_app::views::CHomeDlg").WindowControl(
                searchDepth=1, AutomationId="CHomeDlg.CJoinConfDlg")
        mic_checkbox = join_window.CheckBoxControl(
            searchDepth=2,
            AutomationId=
            "CHomeDlg.CJoinConfDlg.verticalWidget_2.m_pChkBoxDisableMic")
        if micstatus == MicStatus.UMUTE and mic_checkbox.GetTogglePattern(
        ).ToggleState == 1:
            mic_checkbox.Click()
        elif micstatus == MicStatus.MUTE and mic_checkbox.GetTogglePattern(
        ).ToggleState == 0:
            mic_checkbox.Click()

    def mute_camera(self, camerastatus=CameraStatus.UMUTE):
        log.info("Mute/Umute Camera")
        join_window = auto.WindowControl(
            searchDepth=1, ClassName="ev_app::views::CHomeDlg").WindowControl(
                searchDepth=1, AutomationId="CHomeDlg.CJoinConfDlg")
        camera_checkbox = join_window.CheckBoxControl(
            searchDepth=2,
            AutomationId=
            "CHomeDlg.CJoinConfDlg.verticalWidget_2.m_pChkBoxDisableCamera")
        if camerastatus == CameraStatus.MUTE and camera_checkbox.GetTogglePattern(
        ).ToggleState == 0:
            camera_checkbox.Click()
        elif camerastatus == CameraStatus.UMUTE and camera_checkbox.GetTogglePattern(
        ).ToggleState == 1:
            camera_checkbox.Click()

    def make_call(self,
                  calltype=CallType.Video,
                  micstatus=MicStatus.UMUTE,
                  camerastatus=CameraStatus.UMUTE):
        log.info(
            "Combination video/Audio call with Mic/Camera with Mute/Umute")
        join_window = auto.WindowControl(
            searchDepth=1, ClassName="ev_app::views::CHomeDlg").WindowControl(
                searchDepth=1, AutomationId="CHomeDlg.CJoinConfDlg")
        video_call = join_window.ButtonControl(
            searchDepth=3,
            AutomationId=
            "CHomeDlg.CJoinConfDlg.verticalWidget_2.horizontalWidget.m_pBtnVideoJoin"
        )
        audio_call = join_window.ButtonControl(
            searchDepth=3,
            AutomationId=
            "CHomeDlg.CJoinConfDlg.verticalWidget_2.horizontalWidget.m_pBtnAudioJoin"
        )
        self.mute_mic(micstatus)
        self.mute_camera(camerastatus)

        if calltype == CallType.Video:
            log.info("Video call")
            video_call.Click()
        else:
            log.info("Audio call")
            audio_call.Click()

    def make_call_and_drop(self,
                           calltype=CallType.Video,
                           micstatus=MicStatus.UMUTE,
                           camerastatus=CameraStatus.UMUTE):
        log.info(
            "Combination video/Audio call with Mic/Camera with Mute/Umute")
        join_window = auto.WindowControl(
            searchDepth=1, ClassName="ev_app::views::CHomeDlg").WindowControl(
                searchDepth=1, AutomationId="CHomeDlg.CJoinConfDlg")
        video_call = join_window.ButtonControl(
            searchDepth=3,
            AutomationId=
            "CHomeDlg.CJoinConfDlg.verticalWidget_2.horizontalWidget.m_pBtnVideoJoin"
        )
        audio_call = join_window.ButtonControl(
            searchDepth=3,
            AutomationId=
            "CHomeDlg.CJoinConfDlg.verticalWidget_2.horizontalWidget.m_pBtnAudioJoin"
        )
        self.mute_mic(micstatus)
        self.mute_camera(camerastatus)
        operate_in_meeting = OperateInMeeting()
        if calltype == CallType.Video:
            log.info("Video call")
            video_call.Click()
            sleep(20)
            operate_in_meeting.hangup_call()
        else:
            log.info("Audio call")
            audio_call.Click()
            sleep(20)
            operate_in_meeting.audio_only_hangup()

    def join_now_meeting_from_panel(self,
                                    calltype=CallType.Video,
                                    micstatus=MicStatus.UMUTE,
                                    camerastatus=CameraStatus.UMUTE):
        log.info("Make a call from the panel")
        self.click_upgrade_notice()
        self.hexMeetWindow.GroupControl(
            searchDepth=1, AutomationId="CHomeDlg.m_pWgtContext").TextControl(
                searchDepth=8, Name="加入会议").Click()
        self.make_call(calltype, micstatus, camerastatus)

    def join_now_meeting_from_top_menu(self,
                                       calltype=CallType.Video,
                                       micstatus=MicStatus.UMUTE,
                                       camerastatus=CameraStatus.UMUTE):
        log.info("Make a call from top menu")
        self.click_upgrade_notice()
        self.hexMeetWindow.GroupControl(
            searchDepth=1,
            AutomationId="CHomeDlg.m_pWgtTitleBar").ButtonControl(
                searchDepth=1,
                AutomationId="CHomeDlg.m_pWgtTitleBar.m_pBtnJoinConf").Click()
        self.make_call(calltype, micstatus, camerastatus)

    def join_now_meeting_from_top_menu_hangup(self,
                                              calltype=CallType.Video,
                                              micstatus=MicStatus.UMUTE,
                                              camerastatus=CameraStatus.UMUTE):
        log.info("Make a call from top menu")
        self.click_upgrade_notice()
        self.hexMeetWindow.GroupControl(
            searchDepth=1,
            AutomationId="CHomeDlg.m_pWgtTitleBar").ButtonControl(
                searchDepth=1,
                AutomationId="CHomeDlg.m_pWgtTitleBar.m_pBtnJoinConf").Click()
        self.make_call_and_drop(calltype, micstatus, camerastatus)

    def join_now_meeting_from_reserved_item(self,
                                            calltype=CallType.Video,
                                            micstatus=MicStatus.UMUTE,
                                            camerastatus=CameraStatus.UMUTE):
        log.info("Make a call from reserved meeting itself")
        self.click_upgrade_notice()
        self.hexMeetWindow.GroupControl(
            searchDepth=1,
            AutomationId="CHomeDlg.m_pWgtContext").CustomControl(
                searchDepth=12, Name="加入会议").Click()
        self.make_call(calltype, micstatus, camerastatus)

    def join_now_meeting_from_reserved_item_and_hangup(
            self,
            calltype=CallType.Video,
            micstatus=MicStatus.UMUTE,
            camerastatus=CameraStatus.UMUTE):
        log.info("Make a call from reserved meeting itself")
        self.click_upgrade_notice()
        self.hexMeetWindow.GroupControl(
            searchDepth=1,
            AutomationId="CHomeDlg.m_pWgtContext").CustomControl(
                searchDepth=12, Name="加入会议").Click()
        self.make_call_and_drop(calltype, micstatus, camerastatus)

    def is_in_meeting(self):
        return auto.WindowControl(searchDepth=1, ClassName="ev_app::views::CLayoutBackgroundDlg").WindowControl(
            searchDepth=1, ClassName="ev_app::views::CLayoutCoverDlg") \
            .GroupControl(searchDepth=2,
                          AutomationId="CLayoutBackgroundDlg.CLayoutPeopleSettingDlg.CLayoutCoverDlg.CLayoutCellCoverDlg.m_pWgtContent").Exists()

    def click_upgrade_notice(self):
        sleep(5)
        log.info("click OK button")
        try:
            HexmeetWindowSingleton().getHexmeetWindow().GroupControl(
                searchDepth=1,
                AutomationId="CHomeDlg.m_pWgtContext").ButtonControl(
                    searchDepth=8, Name="确定").Click()
        except:
            print()