pangyou123456 2024-04-08 17:52 采纳率: 16.7%
浏览 22

appium 2.5.1多进程自动化多台真机测试时候经常提示'exited with code 1'

appium 2.5.1多进程自动化多台真机测试时候经常提示Stacktrace:
UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command '/usr/local/android-sdk-linux/platform-tools/adb -P 5037 -s 8TAQOVSKOFHY4L4D forward tcp:8201 tcp:6790' exited with code 1'; Command output: adb: error: more than one device/emulator
大概看了下,大致意思连接了不只一个手机或模拟器,但有时重启手机和电脑又可正常,不太明白为什么有时可以有时不正常。

 def appium_App(self, port, device_name, platform_version,product_brand,network_mode, voice_mode,sim_slot,sim1_num,sim2_num,file_name,file_path):
        self.desired_caps = {
            # 平台名称
            "platformName": "Android",
            # 系统版本
            "platformVersion": platform_version,
            # 设备的名称
            "deviceName": device_name,
            "udid": device_name,
            # 设置使用 Unicode 编码方式发送字符串到设备的键盘
            "unicodeKeyboard": "true",
            # 设置重置设备的软键盘状态并隐藏键盘
            "restKeyboard": "true",
            "noReset": True,  # 不要重置App
            "settings[waitForIdleTimeout]": 100,
            "newCommandTimeout": 60000,
        }
        # 加载测试的配置选项和参数(Capabilities配置)
        self.options = UiAutomator2Options().load_capabilities(self.desired_caps)
        # Appium服务器地址端口,本地用http://127.0.0.1:4723
        self.driver = webdriver.Remote(f"http://127.0.0.1:{port}", options=self.options)

  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-04-08 18:20
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题分析: 根据报错信息和描述,问题可能是由于多台真机连接时,adb(Android 调试桥)无法正确识别要与之通信的设备,导致无法建立连接,从而抛出错误。
    解决思路:

    1. 排查连接状态 :确认多台设备是否正确连接,并且只有一个设备与电脑连接。可以通过执行adb devices命令来查看当前连接的设备列表,确保只有一个设备处于连接状态。
    2. 唯一设备标识 :对于每个设备,确保其具有唯一的标识符。在代码中使用udid字段指定设备标识,但可能存在设备标识不唯一的情况,导致adb无法正确识别设备。
    3. 动态分配端口 :在启动Appium服务器时,动态分配端口以避免端口冲突。可以通过设置port参数为0来实现动态分配端口,让Appium自动选择可用端口。
    4. 异常处理机制 :在代码中增加异常处理机制,对于连接设备出现异常的情况进行捕获和处理,可以尝试重新连接设备或者重启Appium服务器。
    5. 更新adb版本 :有时候问题可能是由于adb版本不兼容或存在bug引起的,尝试更新到最新版本的adb,或者使用其他版本来排除adb本身的问题。
      解决方案代码示例:
      pythonCopy code
      import subprocess
      class AppiumManager:
      def start_appium_server(self, port):
      # 动态分配端口
      if port == 0:
      port = self._find_available_port()
      # 启动Appium服务器
      appium_command = f"appium -p {port}"
      subprocess.Popen(appium_command, shell=True)
      return port
      def _find_available_port(self):
      # 实现动态分配端口的逻辑
      pass
      def appium_App(self, port, device_name, platform_version, product_brand, network_mode, voice_mode, sim_slot, sim1_num, sim2_num, file_name, file_path):
      self.desired_caps = {
      "platformName": "Android",
      "platformVersion": platform_version,
      "deviceName": device_name,
      "udid": device_name,
      "unicodeKeyboard": "true",
      "resetKeyboard": "true",
      "noReset": True,
      "settings[waitForIdleTimeout]": 100,
      "newCommandTimeout": 60000,
      }
      self.options = UiAutomator2Options().load_capabilities(self.desired_caps)
      # 尝试连接设备,增加异常处理
      try:
      self.driver = webdriver.Remote(f"http://127.0.0.1:{port}", options=self.options)
      except Exception as e:
      print(f"Failed to connect to device {device_name}: {str(e)}")
      # 可以尝试重新连接或者重启Appium服务器
      # self.restart_appium_server()
      # self.appium_App(port, device_name, platform_version, product_brand, network_mode, voice_mode, sim_slot, sim1_num, sim2_num, file_name, file_path)
      def restart_appium_server(self):
      # 实现重启Appium服务器的逻辑
      pass
      # 示例用法
      appium_manager = AppiumManager()
      port = appium_manager.start_appium_server(0)
      appium_manager.appium_App(port, device_name, platform_version, product_brand, network_mode, voice_mode, sim_slot, sim1_num, sim2_num, file_name, file_path)
      
      这些解决方案的实施应该能够帮助您解决多台真机测试时经常出现的连接问题。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    评论

报告相同问题?

问题事件

  • 创建了问题 4月8日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀