Files
cjgc_data/add_transition_point.py

146 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
添加转点脚本
使用已建立的 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)