草稿随笔1

from selenium.webdriver.common.by import By
from test_appium.page.BasePage1 import BasePage
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException

class MainPage2(BasePage):
    total_attempts = 200
    success_count = 0
    failure_count = 0

    def operate_device(self):
        # 记录开始时间
        start_time = time.time()

        for _ in range(self.total_attempts):
            # 步骤1:点击按钮device_tv,弹出弹框。
            self.click_element('//android.widget.TextView[@resource-id="xxxx:id/device_tv"]')

            # 步骤2:判断弹框内是否存在元素lv_devices。
            lv_devices_present = self.check_element_present('//androidx.recyclerview.widget.RecyclerView[@resource-id="xxxx:id/lv_devices"]',
                                                            timeout=5)

            retries = 0
            while not lv_devices_present and retries < 3:
                # 步骤3:如果没有出现元素lv_devices,重试点击按钮bt_refresh最多3次。
                self.click_element('//android.widget.Button[@resource-id="xxxx:id/bt_refresh"]')
                retries += 1
                lv_devices_present = self.check_element_present('//androidx.recyclerview.widget.RecyclerView[@resource-id="xxxx:id/lv_devices"]',
                                                                timeout=5)

            if not lv_devices_present:
                # 若3次尝试后仍未出现,点击按钮tv_close。
                self.click_element('//android.widget.TextView[@resource-id="xxxx:id/tv_close"]')
                continue

            # 步骤4和5:处理lv_devices出现的情况
            self.handle_lv_devices()
            # time.sleep(180)


        # 记录结束时间
        end_time = time.time()
        # 计算并返回耗时
        duration = end_time - start_time
        # 将耗时转换为分钟和秒
        minutes, seconds = divmod(duration, 60)
        # 输出统计的成功与失败次数
        print(f"总次数: {self.total_attempts}, 成功次数: {self.success_count}, 失败次数: {self.failure_count}")
        print(f"开始时间: {time.ctime(start_time)}")
        print(f"结束时间: {time.ctime(end_time)}")
        print(f"耗时: {minutes:.0f} minutes, {seconds:.0f} seconds")

    def click_element(self, xpath):
        try:
            element = WebDriverWait(self._driver, 2).until(
                EC.presence_of_element_located((By.XPATH, xpath))
            )
            element.click()
            return True
        except:
            return False


    def check_element_present(self, xpath, timeout=10):
        try:
            WebDriverWait(self._driver, timeout).until(
                EC.presence_of_element_located((By.XPATH, xpath))
            )
            return True
        except:
            return False

    def handle_lv_devices(self):
        #检查并点击tv_operate或aa_operate
        tv_operate_present = self.check_element_present(
            '//android.widget.TextView[@resource-id="xxxx:id/tv_sn" and contains(@text, "000079")]/../android.widget.TextView[@resource-id="xxxx:id/tv_operate"]',
            timeout=5)
        retries = 0
        while not tv_operate_present and retries < 2:
            # 步骤3:如果没有出现元素lv_devices,重试点击按钮bt_refresh最多3次。
            self.click_element('//android.widget.Button[@resource-id="xxxx:id/bt_refresh"]')
            retries += 1
            tv_operate_present = self.check_element_present(
                '//android.widget.TextView[@resource-id="xxxx:id/tv_sn" and contains(@text, "000079")]/../android.widget.TextView[@resource-id="xxxx:id/tv_operate"]',
                timeout=5)

        if not tv_operate_present:
            # 若2次尝试后仍未出现,点击按钮tv_close。
            self.click_element('//android.widget.TextView[@resource-id="xxxx:id/tv_close"]')
            return

        # clicked = self.try_click_operate_button('//android.widget.TextView[@resource-id="xxxx:id/tv_sn" and @text="PF810_000079"]/../android.widget.TextView[@resource-id="xxxx:id/tv_operate"]')

        clicked = self.try_click_operate_button('//android.widget.TextView[@resource-id="xxxx:id/tv_sn" and contains(@text, "000079")]/../android.widget.TextView[@resource-id="xxxx:id/tv_operate"]')

        # clicked = self.try_click_operate_button('//android.widget.TextView[@resource-id="xxxx:id/tv_operate"]') or \
        #           self.try_click_operate_button('(//android.widget.TextView[@resource-id="xxxx:id/tv_operate"])[1]')

        if not clicked:
            # self.click_element('//android.widget.TextView[@resource-id="xxxx:id/tv_close"]')
            return

        #获取吐司



        # 等待直到tv_title出现
        try:
            # wait = WebDriverWait(self._driver, 40)
            #
            # # 等待tv_title元素不可见
            # wait.until(EC.invisibility_of_element_located((By.XPATH, '//android.widget.TextView[@resource-id="xxxx:id/tv_title"]')))
            #
            # # 再次尝试查找tv_title元素
            # tv_title_present = wait.until(EC.presence_of_element_located((By.XPATH, '//android.widget.TextView[@resource-id="xxxx:id/tv_title"]')))

            tv_title_present = WebDriverWait(self._driver, 40).until(
                EC.presence_of_element_located((By.XPATH, '//android.widget.TextView[@resource-id="xxxx:id/tv_title"]'))
            )

            if not tv_title_present:
                return

            tv_title_text = self._driver.find_element(By.XPATH, '//android.widget.TextView[@resource-id="xxxx:id/tv_title"]').text
            print(f"tv_title_text:{tv_title_text}")
            # 根据tv_title的文本进行相应的操作
            if tv_title_text == "环境参数校准":
                self.success_count += 1
                self.click_element('//android.widget.Button[@resource-id="xxxx:id/btn_sure"]')
            elif tv_title_text in ["连接设备...", "连接失败"]:
                self.failure_count += 1
                self.click_element('//android.widget.TextView[@resource-id="xxxx:id/tv_close"]')
            print(f"总次数: {self.total_attempts}, 成功次数: {self.success_count}, 失败次数: {self.failure_count},${time.ctime(time.time())}")
        except:
            time.sleep(2)
            if self.check_element_present('//android.widget.TextView[@resource-id="xxxx:id/tv_close"]'):
                self.failure_count += 1
                self.click_element('//android.widget.TextView[@resource-id="xxxx:id/tv_close"]')
            else:
                self.success_count += 1
                self.click_element('//android.widget.Button[@resource-id="xxxx:id/btn_sure"]')
            print(f"总次数: {self.total_attempts}, 成功次数: {self.success_count}, 失败次数: {self.failure_count},${time.ctime(time.time())}")




    def try_click_operate_button(self, xpath):
        if self.check_element_present(xpath, timeout=5):
            button_text = self._driver.find_element(By.XPATH, xpath).text
            if button_text == "断开":
                self.click_element(xpath)
                # time.sleep(5)  # 确保点击间隔
                return False
            return self.click_element(xpath)
        return False





    # def get_and_validate_toast(self,driver, expected_text):
    #     try:
    #         # 使用JavaScript获取当前显示的Toast消息
    #         toast_text = driver.execute_script('''
    #             var toast = UiDevice.getInstance().findObject(new UiSelector().className("android.widget.Toast"));
    #             return toast.getContentDescription();
    #         ''')
    #
    #         # 验证Toast内容是否为预期文本
    #         if toast_text.strip() == expected_text:
    #             print("找到预期的Toast消息.连接失败")
    #             return True
    #         else:
    #             print("找不到预期的Toast消息")
    #             return False
    #     except NoSuchElementException:
    #         print("没有吐司出现")
    #     except Exception as e:
    #         print(f"检索Toast消息时出错: {e}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值