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}")
09-10
1950
