from 预定系统.Base.app_base import *
import logging
import time

class same_screen_share_000x:
    """
        执行指令:
            1.cd 预定系统
            2.hytest --report_title 无纸化同屏测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 无纸化同屏
    """
    tags = ['无纸化2.0同屏', '展厅巡检', '无纸化2.0测试']

    def teststeps(self):
        wd = GSTORE['wd']
        app_drive1 = None
        app_drive2 = None

        try:
            # 初始化第一个设备
            app_drive1 = app_setup_driver("Android", "7.1.2", "展厅无纸化设备2.0", "com.ubains.local.gviewer", "com.ubains.ub.gview.SplashActivity","192.168.5.156:5555")
            app_drive1.implicitly_wait(10)  # 设置缺省等待时间

            # 初始化第二个设备
            app_drive2 = app_setup_driver("Android", "7.1.2", "展厅无纸化设备2.0", "com.ubains.local.gviewer", "com.ubains.ub.gview.SplashActivity","192.168.5.157:5555")
            app_drive2.implicitly_wait(10)  # 设置缺省等待时间

            # 使用显式等待来等待元素出现
            logging.info(f"等待登录页加载.")
            sleep(10)

            # 进入后台设置界面
            logging.info(f"尝试进入后台设置")
            back_setting_button = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                          "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[1]/android.widget.Button[3]")
            click_with_retry(back_setting_button)

            # 输入管理员密码点击【确定】按钮
            logging.info(f"尝试输入管理员密码点击【确定】")
            admin_pwd_input = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                      "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.EditText")
            admin_pwd_input.send_keys("Ubains@123")
            sleep(3)

            # 点击确定按钮
            confirm_button = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                     "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.TextView[3]")
            click_with_retry(confirm_button)
            sleep(5)

            # 先截取另一台设备的界面做参照物
            INFO(f"这是设备B的界面")
            # 调用截屏函数
            get_screenshot_with_retry(wd, app_drive2, "Exhibit_Inspect", "No_PaperLess", "BeforeShareDeviceB")

            # 进入【同屏和视频服务】界面
            logging.info(f"进入【同屏和视频服务】")
            same_screen_module = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                              '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.FrameLayout[1]/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[4]/android.widget.FrameLayout/android.widget.TextView')
            click_with_retry(same_screen_module)
            sleep(2)

            # 点击右上角【同屏配置】按钮
            share_setting_button = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                              '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.FrameLayout[2]/androidx.viewpager.widget.ViewPager/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.Button[1]')
            click_with_retry(share_setting_button)
            sleep(3)

            # 进入同屏配置模块界面,点击【同屏共享】进入同屏共享界面
            same_screen_button = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                              "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.ScrollView/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.TextView")
            click_with_retry(same_screen_button)
            sleep(2)

            # 点击【开始】同屏按钮
            same_screen_start_button = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                                   '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/androidx.viewpager.widget.ViewPager/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout/android.view.ViewGroup/androidx.appcompat.widget.LinearLayoutCompat/android.widget.Button[1]')
            click_with_retry(same_screen_start_button)
            sleep(2)

            # 截取设备A和设备B的同屏画面截屏
            INFO(f"这是设备A同屏共享的界面")
            get_screenshot_with_retry(wd, app_drive1, "Exhibit_Inspect","No_PaperLess", "AfterShareDeviceA")

            INFO(f"这是设备B同屏共享的界面")
            get_screenshot_with_retry(wd, app_drive2, "Exhibit_Inspect","No_PaperLess", "AfterShareDeviceB")

            # 调用图片对比函数判断相似度
            # image1_path = r"/预定系统/reports/imgs/Exhibit_Inspect/No_PaperLess/同屏后-无纸化设备A界面截屏.png"
            # image2_path = r"/预定系统/reports/imgs/Exhibit_Inspect/No_PaperLess/同屏后-无纸化设备B界面截屏.png"
            #
            # if not os.path.exists(image1_path):
            #     logging.error(f"图片 {image1_path} 不存在")
            #     exit(1)
            # if not os.path.exists(image2_path):
            #     logging.error(f"图片 {image2_path} 不存在")
            #     exit(1)
            #
            #     # 对比两张截图的相似度
            # result1 = classify_hist_with_split(image1_path, image2_path)
            #
            # # 确保 result1 是一个标量值
            # if isinstance(result1, numpy.ndarray):
            #     result1 = result1.item()
            # # 输出相似度
            # INFO("相似度为:" + "%.2f%%" % (result1 * 100))

            sleep(1)
            # 点击【停止】同屏按钮,退出同屏操作
            share_quit_button = find_element_with_retry(app_drive1, AppiumBy.XPATH,
                                                             '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/androidx.viewpager.widget.ViewPager/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout/android.view.ViewGroup/androidx.appcompat.widget.LinearLayoutCompat/android.widget.Button[2]')
            INFO("执行退出同屏操作")
            click_with_retry(share_quit_button)
            # 退出同屏后截屏操作
            INFO(f"这是设备A关闭同屏共享的界面")
            get_screenshot_with_retry(wd, app_drive1, "Exhibit_Inspect","No_PaperLess", "QuitShareDeviceA")

            INFO(f"这是设备B关闭同屏共享的界面")
            get_screenshot_with_retry(wd, app_drive2, "Exhibit_Inspect","No_PaperLess", "QuitShareDeviceB")
            sleep(5)


        except Exception as e:
            logging.error(f"发生错误: {e}", exc_info=True)