""" 添加转点脚本 使用已建立的 Appium 连接来添加转点 """ import json import os import logging import sys from selenium.common.exceptions import TimeoutException, NoSuchElementException from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait # Session 信息文件路径 SESSION_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "appium_session.json") logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s: %(message)s") def load_session_info(): """从文件加载 session 信息""" if not os.path.exists(SESSION_FILE): logging.error(f"Session 文件不存在: {SESSION_FILE}") logging.error("请先运行 connect_appium.py 建立连接") return None try: with open(SESSION_FILE, "r", encoding="utf-8") as f: return json.load(f) except Exception as e: logging.error(f"读取 session 文件失败: {e}") return None def attach_to_session(session_id, device_id): """Attach 到现有的 Appium session""" from appium import webdriver from appium.options.android import UiAutomator2Options try: server_url = "http://127.0.0.1:4723/wd/hub" # 创建 options options = UiAutomator2Options() options.platform_name = "Android" options.device_name = device_id options.automation_name = "UiAutomator2" options.udid = device_id # 连接到现有 session driver = webdriver.Remote( server_url, options=options ) # 手动设置 session_id driver.session_id = session_id # 验证 session 是否有效 try: current_package = driver.current_package logging.info(f"Session 有效,当前应用: {current_package}") except Exception as e: logging.error(f"Session 无效: {e}") return None, None wait = WebDriverWait(driver, 20) return driver, wait except Exception as e: logging.error(f"Attach 到 session 失败: {e}") return None, None def get_driver_from_connection(): """从已建立的连接获取 driver""" session_info = load_session_info() if not session_info: return None, None, None session_id = session_info.get("session_id") device_id = session_info.get("device_id") if not session_id or not device_id: logging.error("Session 信息不完整") return None, None, None driver, wait = attach_to_session(session_id, device_id) return driver, wait, device_id def add_transition_point(driver, wait, device_id=None): """ 添加转点 参数: driver: WebDriver 实例 wait: WebDriverWait 实例 device_id: 设备ID(可选) 返回: bool: 是否成功 """ device_str = f"设备 {device_id} " if device_id else "" try: # 查找并点击添加转点按钮 add_transition_btn = wait.until( EC.element_to_be_clickable((AppiumBy.ID, "com.bjjw.cjgc:id/btn_add_ZPoint")) ) add_transition_btn.click() logging.info(f"{device_str}已点击添加转点按钮") return True except TimeoutException: logging.error(f"{device_str}等待添加转点按钮超时") return False except Exception as e: logging.error(f"{device_str}添加转点时出错: {str(e)}") return False def main(): """主函数""" # 获取连接 driver, wait, device_id = get_driver_from_connection() if not driver: logging.error("无法获取 Appium 连接,请先运行 connect_appium.py") return False logging.info(f"成功连接到设备: {device_id}") # 添加转点 result = add_transition_point(driver, wait, device_id) if result: logging.info("添加转点成功!") else: logging.error("添加转点失败") return result if __name__ == "__main__": success = main() sys.exit(0 if success else 1)