尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Appium自动化测试:从原理到实战的环境搭建与元素定位指南

Appium自动化测试:从原理到实战的环境搭建与元素定位指南
📅 发布时间:2026/7/18 2:13:00

1. 项目概述:为什么是Appium?

在移动应用开发如火如荼的今天,无论是产品经理、开发者还是测试工程师,都绕不开一个核心问题:如何保证我们开发的App在各种设备、各种场景下都能稳定运行?手动测试?那意味着你需要准备几十上百台真机,雇佣庞大的测试团队,日夜不停地重复点击、滑动、输入——这不仅是人力成本的噩梦,更是效率的瓶颈,尤其当你的应用需要快速迭代、频繁发布时。

于是,自动化测试成了必然选择。而当你开始研究移动端自动化测试框架时,Appium这个名字几乎会出现在所有推荐列表的榜首。它就像一个“翻译官”,允许你用自己熟悉的编程语言(比如Python、Java),通过一套标准的协议(WebDriver),去指挥iOS和Android设备上的原生、混合或Web应用完成各种操作。这意味着,你不需要为了测试Android应用去学Java,为了测试iOS应用去学Objective-C或Swift,一套代码,理论上可以跨平台运行。

我最初接触Appium,是因为团队需要一套能同时覆盖Android和iOS的自动化测试方案。当时也考察过其他框架,比如Android原生的Espresso和iOS的XCUITest,它们性能好、速度快,但语言和生态绑定太死,团队学习成本和维护成本会翻倍。也看过一些基于图像识别的方案,但在UI频繁变更的项目里,维护脚本简直是灾难。Appium的“一次编写,到处运行”(Write Once, Run Anywhere)理念,以及它对主流编程语言的广泛支持,最终让我们选择了它。当然,这条路并非一帆风顺,从环境配置的“劝退”到脚本稳定性的打磨,踩过的坑不计其数。这篇文章,我就结合自己多年的实战经验,带你从零开始,深入理解Appium,并搭建起一个可用的自动化测试环境。

2. 核心架构与工作原理拆解

在动手安装之前,理解Appium是如何工作的至关重要。这能帮助你在后续遇到各种“诡异”问题时,快速定位是客户端、服务端还是设备本身的问题。

2.1 客户端-服务器架构

Appium的核心是一个C/S(客户端-服务器)架构。你可以把它想象成一个餐厅:

  • Appium Server(服务器/厨房):这是一个独立的HTTP服务器,使用Node.js编写。它负责接收从“客户端”发来的点餐请求(测试指令)。
  • Appium Client(客户端/顾客):这就是你写的测试脚本。你可以用Python的selenium库、Java的client-java等来充当这个客户端。它按照WebDriver协议的标准“菜单”(API),向Server发送请求。
  • WebDriver协议(菜单):这是一套标准化的RESTful API规范,定义了如何与浏览器(或移动应用)交互,比如“点击”、“输入文字”、“获取元素文本”。Appium完全遵循这个协议,这也是它能支持多种语言的原因——只要语言有实现WebDriver协议的客户端库就行。

你的测试脚本(Client)通过HTTP请求告诉Appium Server:“请在设备A上,打开应用B,然后点击ID为‘login_button’的元素。” Server收到指令后,再去调动相应的“厨具”和“食材”来执行。

2.2 平台执行引擎:真正的“执行者”

Appium Server本身并不直接操作手机。它更像一个调度中心,根据测试目标的平台(Android/iOS),将WebDriver命令“翻译”成该平台原生测试框架能理解的指令,并调用它们去执行。这就是Appium“跨平台”能力的秘密。

  • 对于Android(4.2+版本): Appium主要利用UiAutomator2框架(Google官方推荐)。当Appium Server收到命令后,它会在目标设备上安装一个辅助测试应用(比如io.appium.uiautomator2.server)。你的测试命令通过Server转发给这个辅助应用,再由它调用UiAutomator2的API来操作真实的APP界面。对于更老的设备,它也可以使用Selendroid模式。

    注意:UiAutomator2是当前Android自动化测试的绝对主流和推荐选择,它支持更丰富的控件识别和操作。除非兼容性要求,否则新项目都应直接使用UiAutomator2。

  • 对于iOS(9.3+版本): Appium使用苹果官方的XCUITest框架。其原理与Android类似,Appium Server会在Mac电脑上(iOS测试必须在macOS系统下进行)启动一个WebDriverAgent(WDA)项目。WDA作为一个中间人,接收来自Appium Server的指令,并将其转换为XCUITest框架的调用,从而驱动模拟器或真机上的应用。

简单流程总结:你的Python/Java测试脚本--(WebDriver协议)-->Appium Server--(平台特定协议)-->设备上的代理程序(UiAutomator2 Server / WebDriverAgent)--(原生框架)-->操作目标APP

理解了这个流程,你就会明白为什么配置Appium环境时,既需要安装Appium Server,又需要配置对应平台的开发环境(Android SDK/iOS Xcode),因为最终干活的还是这些原生工具。

3. 环境搭建全攻略:从零到可运行

这是新手遇到的第一个,也是最大的门槛。网上教程很多,但往往因为系统版本、工具版本更新而失效。我这里会给出一个清晰的、版本明确的清单和步骤,并附上我踩坑后的解决方案。

3.1 基础环境准备(以Windows/macOS测试Android为例)

无论你用什么语言写脚本,以下环境是Appium Server和Android测试所必需的:

  1. Node.js 与 npm: Appium Server基于Node.js,所以首先需要安装它。建议安装LTS(长期支持)版本,稳定性更有保障。

    • 操作:访问Node.js官网下载安装包。安装完成后,打开终端(Windows CMD/PowerShell, macOS Terminal),输入node -v和npm -v检查是否安装成功。
    • 避坑提示:安装路径不要有中文和空格。在Windows上,如果之前安装过旧版本,请彻底卸载并清理环境变量后再安装新版本,避免冲突。
  2. Java Development Kit (JDK): Appium Server部分组件和Android构建工具需要Java环境。需要安装JDK 8或11(目前最兼容的版本)。

    • 操作:从Oracle官网或AdoptOpenJDK等渠道下载安装。安装后,需要配置JAVA_HOME环境变量(指向JDK安装目录,如C:\Program Files\Java\jdk-11.0.xx),并将%JAVA_HOME%\bin添加到PATH变量中。
    • 验证:终端输入java -version。
  3. Android SDK: 这是Android开发测试的核心。如今Google推荐使用Android Studio来管理SDK,它会自动帮你处理很多事。

    • 操作: a. 下载并安装Android Studio。 b. 启动后,在欢迎界面点击“More Actions” -> “SDK Manager”。 c. 在“SDK Platforms”选项卡中,勾选你打算测试的Android版本(例如Android 13, Android 12)。至少选择一个。 d. 在“SDK Tools”选项卡中,必须勾选: * Android SDK Build-Tools(选择一个较高版本,如33.0.0) * Android SDK Command-line Tools (latest) * Android SDK Platform-Tools(包含adb,这是与设备通信的关键) * Android Emulator(如果你要用模拟器) e. 点击“Apply”安装。
    • 环境变量配置(关键步骤!):
      • ANDROID_HOME:指向Android SDK的根目录。例如:C:\Users\YourName\AppData\Local\Android\Sdk或/Users/YourName/Library/Android/sdk。
      • 将以下路径添加到PATH变量中:
        • %ANDROID_HOME%\platform-tools(包含adb)
        • %ANDROID_HOME%\tools和%ANDROID_HOME%\tools\bin(旧版工具,部分脚本需要)
        • %ANDROID_HOME%\emulator(模拟器相关)
    • 验证:关闭终端重新打开,输入adb version。如果能显示版本号,说明配置成功。

3.2 安装Appium Server

有两种主要方式:通过npm安装命令行版本,或使用桌面图形化工具。强烈建议初学者使用桌面版,它提供了设备检测、元素定位器、日志查看等实用功能,能极大降低入门难度。

  • 方式一:Appium Desktop(推荐):

    1. 访问Appium官方的GitHub Releases页面,下载对应你操作系统的Appium Desktop安装包。
    2. 安装并运行。你会看到一个简洁的界面,可以启动服务器、查看会话、使用Inspector。
  • 方式二:通过npm安装(适合CI/CD或深度定制):

    npm install -g appium

    安装完成后,在终端输入appium即可启动服务。你还可以安装驱动(Driver),例如专门用于Android的UIAutomator2驱动:

    appium driver install uiautomator2

3.3 安装Appium Client(以Python为例)

Appium Client就是你要写测试脚本的编程语言库。对于Python,它就是Appium-Python-Client包,它扩展了Selenium的WebDriver API。

pip install Appium-Python-Client

确保你的Python环境也已安装Selenium:pip install selenium。

3.4 连接测试设备

你可以使用真机或模拟器/虚拟机。

  • 使用Android真机:

    1. 手机开启“开发者选项”(通常是在“关于手机”里连续点击“版本号”7次)。
    2. 在开发者选项中,开启“USB调试”。
    3. 用USB线连接电脑。在终端输入adb devices。如果看到设备序列号并显示device,表示连接成功。如果显示unauthorized,需要在手机弹出的授权对话框中点击“允许”。
  • 使用Android模拟器:

    1. 在Android Studio的“AVD Manager”中创建一个虚拟设备。
    2. 启动该设备。
    3. 同样使用adb devices命令检查,模拟器也会被列出。

3.5 验证环境:一个“Hello World”测试

让我们写一个最简单的脚本,打开手机上的“设置”应用,然后立刻关闭,来验证整个链路是否通畅。

  1. 启动Appium Server:打开Appium Desktop,保持默认设置(服务器地址127.0.0.1,端口4723),点击“Start Server”。

  2. 准备测试脚本(test_hello_appium.py):

from appium import webdriver from appium.options.android import UiAutomator2Options import time # 1. 定义设备能力和应用信息 capabilities = { “platformName”: “Android”, # 平台 “platformVersion”: “13”, # 安卓版本,根据你的设备修改 “deviceName”: “Android Emulator”, # 设备名,可以是自定义的,adb devices列出的名字也行 “automationName”: “UiAutomator2”, # 自动化引擎 “appPackage”: “com.android.settings”, # 系统设置的应用包名 “appActivity”: “.Settings”, # 设置应用的主Activity “noReset”: True # 不重置应用状态(避免每次清除数据) } # 2. 将Capabilities转换为Options对象(新版本推荐方式) options = UiAutomator2Options().load_capabilities(capabilities) # 3. 连接Appium Server,并传入配置 driver = webdriver.Remote(‘http://127.0.0.1:4723’, options=options) # 4. 一个简单的操作:等待2秒,让你看到界面 time.sleep(2) print(“成功打开了设置应用!”) # 5. 关闭会话 driver.quit() print(“测试完成,会话已关闭。”)
  1. 执行脚本: 确保设备已连接(adb devices可见),Appium Server正在运行。然后在终端运行:
    python test_hello_appium.py
    如果一切顺利,你会看到手机或模拟器上的“设置”应用被自动打开,2秒后关闭,并在控制台看到打印的信息。

实操心得: 第一次运行失败的概率很高。别慌,查看Appium Desktop的日志窗口!里面会有详细的错误信息。常见问题有:设备未连接、appPackage/appActivity写错、端口被占用、Capability拼写错误。日志是排查问题的第一手资料,一定要学会看。

4. 核心能力与元素定位实战

环境跑通只是万里长征第一步。接下来,我们要让脚本真正“动”起来,去点击、输入、滑动。这一切的基础,是元素定位。

4.1 必备工具:Appium Inspector

Appium Desktop自带一个神器——Inspector。它类似于Web开发中的“检查元素”工具。启动Appium Server后,点击“Start Inspector Session”按钮,配置好设备信息(和脚本中的Capabilities类似),就能连接到设备,实时查看当前界面的UI层级树,并获取元素的属性。这是编写定位脚本时不可或缺的辅助工具。

4.2 八大元素定位策略

Appium继承了Selenium的定位方式,并增加了一些移动端特有的方式。以下是最常用的几种:

  1. ID/Resource ID(id):对于Android,通常是resource-id属性(如com.example.app:id/login_button);对于iOS,是name或accessibility id。这是首选且最稳定的定位方式。

    driver.find_element(AppiumBy.ID, “com.example.app:id/username”).send_keys(“testuser”)
  2. Accessibility ID(accessibility_id):在Android对应content-desc,在iOS对应accessibilityIdentifier。这是为无障碍服务设计的标识,如果开发同学设置了,会非常稳定。

    driver.find_element(AppiumBy.ACCESSIBILITY_ID, “登录按钮”).click()
  3. XPath(xpath):功能最强大,但性能相对较差,且容易因UI结构微小变动而失效。慎用,仅在其他定位方式无效时使用。

    driver.find_element(AppiumBy.XPATH, “//android.widget.Button[@text=‘登录’]”).click()
  4. Class Name(class_name):根据控件类型定位,如android.widget.EditText。通常一个界面上同类控件太多,需要结合其他条件。

    elements = driver.find_elements(AppiumBy.CLASS_NAME, “android.widget.TextView”)
  5. Android UIAutomator(android_uiautomator):仅Android可用,使用UiAutomator2的API语法,非常灵活强大。

    # 通过文本定位 driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, ‘new UiSelector().text(“确定”)’).click() # 通过组合条件定位 driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, ‘new UiSelector().resourceId(“com.example:id/btn”).className(“android.widget.Button”)’).click()
  6. iOS Predicate String / Class Chain:仅iOS可用,类似于XPath但效率更高,是iOS定位的利器。

定位策略选择优先级:ID/Resource-ID>Accessibility ID>Android UIAutomator / iOS Predicate>Class Name>XPath。

重要经验:永远不要依赖元素的绝对位置(坐标)或顺序来定位。UI稍作调整,你的脚本就全挂了。与前端开发同学协作,为关键测试元素添加稳定的resource-id或accessibility id,是提升自动化脚本健壮性的最有效手段。

4.3 常用操作API示例

定位到元素后,就可以进行操作了:

from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 点击 login_btn = driver.find_element(AppiumBy.ID, “login_button”) login_btn.click() # 输入文本(先清除原有文本是个好习惯) input_box = driver.find_element(AppiumBy.ID, “username”) input_box.clear() input_box.send_keys(“my_username”) # 获取元素文本 title = driver.find_element(AppiumBy.ID, “title”).text print(f”页面标题是:{title}”) # 判断元素是否显示/可用 is_displayed = driver.find_element(AppiumBy.ID, “submit_btn”).is_displayed() is_enabled = driver.find_element(AppiumBy.ID, “submit_btn”).is_enabled() # 滑动操作(基于坐标,谨慎使用) driver.swipe(start_x=500, start_y=1500, end_x=500, end_y=500, duration=800) # 从下往上滑动 # 更推荐的滑动:使用滚动到某个元素 driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, ‘new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text(“隐私政策”))’) # 等待:显式等待是保证脚本稳定的关键 wait = WebDriverWait(driver, 10) # 最多等10秒 element = wait.until(EC.presence_of_element_located((AppiumBy.ID, “slow_loading_element”))) element.click()

5. 高级配置与实战技巧

掌握了基础操作,我们来看看如何让测试更可靠、更高效。

5.1 Desired Capabilities 深度解析

这是连接脚本与Appium Server的“契约”,告诉Server你要测什么、怎么测。除了上面用到的基础项,一些常用配置能解决特定问题:

  • “autoGrantPermissions”: true:自动处理应用权限弹窗(Android)。
  • “unicodeKeyboard”: true和“resetKeyboard”: true:解决中文输入问题,启用Unicode输入法,测试完成后重置回原有输入法。
  • “noSign”: true:跳过对.apk的重签名(用于测试非自己开发的包时)。
  • “fullReset”: true/“noReset”: false:每次会话后完全重置应用(清除数据)或不清除。根据测试场景选择。
  • “newCommandTimeout”: 300:设置会话超时时间(秒),防止闲置会话占用资源。
  • “adbExecTimeout”: 60000:设置ADB命令执行超时时间(毫秒),对于慢设备可以调大。

5.2 等待策略:隐式、显式与流畅等待

  • 隐式等待(driver.implicitly_wait(10)): 设置一个全局的等待时间,在查找元素时,如果元素没有立即出现,会轮询查找直到超时。不推荐单独使用,因为它对find_elements也生效,可能导致不必要的等待。
  • 显式等待(如上例的WebDriverWait): 针对某个特定条件进行等待,如元素可见、可点击、数量增加等。这是推荐的最佳实践,因为它更精确,只在需要的地方等待。
  • 流畅等待(FluentWait): 可以自定义轮询频率和忽略的异常类型,更灵活,但在Appium中显式等待通常已足够。

黄金法则:关键操作前后(如点击后页面跳转、网络请求后数据加载)一定要使用显式等待,这是避免NoSuchElementException等异常的最有效方法。

5.3 处理混合应用与WebView

很多App内嵌了H5页面(WebView)。测试它们需要切换上下文(Context)。

# 1. 获取所有可用的上下文 contexts = driver.contexts # 返回列表,如 [‘NATIVE_APP’, ‘WEBVIEW_com.example.app’] print(f”所有上下文:{contexts}”) # 2. 切换到WebView上下文 webview_context = contexts[-1] # 通常最后一个 driver.switch_to.context(webview_context) # 3. 现在可以使用Selenium的方式定位网页元素了(通过CSS_SELECTOR, LINK_TEXT等) driver.find_element(By.CSS_SELECTOR, “.submit-btn”).click() # 4. 操作完成后,切回原生上下文 driver.switch_to.context(‘NATIVE_APP’)

注意:测试Android WebView需要满足特定条件:App必须是debug版本,并且WebView必须启用调试(通常通过代码设置WebView.setWebContentsDebuggingEnabled(true))。在真机上测试系统自带浏览器或Chrome的网页,也需要在Chrome中打开chrome://inspect进行调试。

5.4 Page Object Model (POM) 设计模式

当测试用例越来越多时,把元素定位和操作逻辑全部写在用例里会变得难以维护。POM模式将每个页面抽象成一个类,页面的元素定位器和基本操作封装在类的方法里。测试用例只关心业务逻辑。

示例:

# base_page.py class BasePage: def __init__(self, driver): self.driver = driver # login_page.py from appium.webdriver.common.appiumby import AppiumBy from base_page import BasePage class LoginPage(BasePage): # 元素定位器 username_locator = (AppiumBy.ID, “com.example:id/username”) password_locator = (AppiumBy.ID, “com.example:id/password”) login_button_locator = (AppiumBy.ID, “com.example:id/login”) # 页面操作方法 def input_username(self, username): self.driver.find_element(*self.username_locator).send_keys(username) def input_password(self, password): self.driver.find_element(*self.password_locator).send_keys(password) def click_login(self): self.driver.find_element(*self.login_button_locator).click() def login(self, username, password): self.input_username(username) self.input_password(password) self.click_login() # test_login.py def test_successful_login(): driver = get_driver() # 获取驱动的函数 login_page = LoginPage(driver) login_page.login(“valid_user”, “valid_pass”) # … 添加断言,验证登录成功

采用POM后,当登录页面的按钮ID改变时,你只需要修改LoginPage类中的一个地方,所有用到这个按钮的测试用例都不需要改动,极大提升了可维护性。

6. 常见问题排查与性能优化

即使一切配置正确,脚本也可能会因为各种原因失败。这里记录一些高频问题和解决思路。

6.1 连接与启动问题

问题现象可能原因排查步骤与解决方案
Unable to find a matching set of capabilitiesCapabilities配置错误,与设备或Appium Server不匹配。1. 检查platformVersion是否与设备系统版本一致。
2. 检查deviceName是否与adb devices列出的名称匹配(真机可自定义)。
3. 检查appPackage和appActivity是否正确(可通过adb shell dumpsys window | grep mCurrentFocus查看当前Activity)。
An unknown server-side error occurred服务端错误,范围很广。查看Appium Server日志!这是最重要的。常见子问题:
- 应用未安装:确认app路径正确或应用已安装。
- 权限问题:尝试在Capabilities中设置autoGrantPermissions: true。
- 设备离线:重新插拔USB,重启adb服务 (adb kill-server && adb start-server)。
Original error: Could not find a connected Android deviceADB未识别到设备。1. 执行adb devices,确认设备在线且状态为device。
2. 如果是真机,检查USB调试是否开启,电脑是否弹出授权提示。
3. 尝试更换USB线或USB口。
启动Inspector时无法连接Inspector会话的Capabilities配置错误。确保Inspector中填写的Capabilities与你的设备/应用信息完全一致,特别是appPackage和appActivity。

6.2 元素定位与交互问题

问题现象可能原因排查步骤与解决方案
NoSuchElementException元素在当前页面不存在或尚未加载出来。1.使用显式等待,等待元素出现。
2. 使用Appium Inspector确认元素定位器在当前页面是否有效。
3. 检查是否有多个相同的resource-id,尝试改用其他定位方式或使用find_elements取列表后按索引操作。
4. 如果是WebView元素,确认是否已切换到正确的上下文。
Element is not clickable at point元素被遮挡、不可见或处于不可交互状态。1. 检查元素是否被弹窗、键盘遮挡。可先关闭键盘或弹窗。
2. 使用element.is_enabled()和element.is_displayed()判断状态。
3. 尝试使用driver.execute_script(‘mobile: clickGesture’, {‘elementId’: element.id})等Appium扩展命令进行点击。
输入框无法输入中文输入法问题。在Capabilities中设置:“unicodeKeyboard”: true, “resetKeyboard”: true。
脚本运行速度慢1. 使用了低效的定位器(如复杂XPath)。
2. 隐式等待时间设置过长。
3. 不必要的time.sleep()。
1. 优化定位器,优先使用ID、Accessibility ID。
2. 用显式等待替代全局隐式等待和固定休眠。
3. 减少不必要的页面截图、日志输出。

6.3 稳定性与性能优化建议

  1. 增加重试机制:对于网络波动或应用偶尔无响应导致的失败,可以在测试框架层(如pytest)添加重试装饰器,或自己封装带有重试逻辑的操作函数。
  2. 善用appium:settings:可以动态调整Appium Server的行为,例如禁用动画以加快测试速度。
    driver.update_settings({“ignoreUnimportantViews”: True}) # Android UiAutomator2 忽略不重要视图 driver.update_settings({“waitForIdleTimeout”: 100}) # 设置等待界面空闲的超时
  3. 并行测试:如果有多台设备或模拟器,可以利用测试框架(如pytest-xdist)和Appium的多个Server实例(不同端口)进行并行测试,大幅缩短测试套件执行时间。
  4. 日志与报告:集成pytest-html、Allure等报告框架,生成美观的测试报告。同时,将Appium Server日志、脚本日志分类保存,便于失败时分析。
  5. 容器化与CI/CD:将Appium Server、Android模拟器/真机环境容器化(使用Docker),可以快速在Jenkins、GitLab CI等平台上搭建一致的测试环境,实现自动化触发测试。

移动应用自动化测试是一个需要耐心和细致的工作,Appium提供了强大的能力,但也对测试开发人员的综合能力提出了要求。从环境搭建到脚本编写,从元素定位到框架设计,每一步都需要在实践中不断摸索和优化。记住,稳定的自动化测试不是一蹴而就的,它需要与开发流程紧密结合,需要持续的维护和迭代。当你看到成百上千个测试用例在无人值守的深夜自动运行,并为你生成清晰的测试报告时,你会发现前期所有的投入都是值得的。

相关新闻

  • Termux:Android上的Linux终端开发环境全解析
  • C#开源生态全景与高性能组件解析
  • FCBGA与FCCSP封装技术对比与应用解析

最新新闻

  • MySQL连接数爆满紧急处理与优化指南
  • Perl语言核心特性与现代化开发实践
  • 吸油卫生纸哪家口碑好:联盛森宝去油好评 - MXyuyu
  • CryFS加密文件系统全平台部署与实战指南
  • Android照片恢复原理与实用方案详解
  • 【HarmonyOS学习笔记】2026-07-17 | 状态管理V2-@Provider/@Consumer

日新闻

  • 宝珀中国官方售后服务中心|官方热线和维修地址权威信息声明(2026年7月更新) - 宝珀官方售后服务中心
  • # 2026年北京知识产权律师推荐怎么选?看这五点关键不踩雷 - 本地品牌推荐
  • 2026实测教程:生成的拼豆图纸不满意怎么修改才省事 - 省事研究所

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号