1. 环境搭建从零开始配置Appium测试环境第一次接触Appium自动化测试时最让人头疼的就是环境搭建。记得我刚开始配置环境时整整花了两天时间才把所有依赖装好。现在回头看其实只要按照正确顺序安装关键组件半小时就能搞定。下面我会用最直白的语言带你一步步完成这个看似复杂的过程。1.1 JDK安装与配置Java开发工具包JDK是Appium运行的基础。我推荐使用JDK 1.8稳定版这个版本经过大量项目验证兼容性最好。安装时有个小技巧不要使用默认的C盘路径建议专门在D盘创建Java目录比如D:\Java\jdk1.8.0_301这样重装系统时不会丢失配置。配置环境变量时新手常犯三个错误一是变量名拼写错误注意JAVA_HOME全部大写二是路径末尾多加分号三是忘记添加%JAVA_HOME%\bin到Path变量。正确的做法是新建系统变量JAVA_HOME值为你的JDK安装路径编辑Path变量添加%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin可选配置classpath变量值为%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar验证是否成功时别急着关掉cmd窗口。我遇到过输入java -version显示版本号但javac命令报错的情况这说明只配置了JRE没配JDK。两个命令都要测试通过才算真正成功。1.2 Android SDK配置实战Android SDK建议选择29版本Android 10这个版本既不会太老导致兼容性问题又不会太新遇到未知bug。下载SDK Tools时有个坑官网提供的命令行工具sdkmanager现在需要先接受license才能使用。更简单的方法是直接下载包含基本工具的完整包。安装完成后必须配置的三个环境变量是ANDROID_HOME指向SDK根目录Path中添加%ANDROID_HOME%\platform-tools和%ANDROID_HOME%\tools这里有个实用技巧在cmd中输入adb devices前先确保手机开启了USB调试模式。很多新手连接不上设备就是因为没在开发者选项里开启这个功能。如果adb报错尝试先用adb kill-server再adb start-server重启服务。1.3 Node.js与Appium Desktop安装Node.js现在安装非常简单官方安装包会自动配置环境变量。但要注意两点一是安装路径不要有中文和空格二是安装完成后需要手动更新npm到最新版npm install -g npm。Appium Desktop是官方提供的图形化工具对新手特别友好。安装后建议做三个设置在Settings里勾选Allow Session Override设置本地服务器端口为4723默认值开启Show Android Logs方便调试我习惯把Appium的安装目录也加到Path里这样可以直接在命令行启动服务。启动时如果遇到端口冲突可以用netstat -ano | findstr 4723找到占用进程并结束它。2. 连接真机与模拟器2.1 真机调试完整流程用真实手机测试是最接近用户场景的方式。以华为手机为例需要先在关于手机里连续点击版本号7次开启开发者模式然后在开发者选项里开启USB调试和仅充电模式下允许ADB调试。连接电脑后在cmd输入adb devices应该能看到设备序列号。常见问题排查如果设备未列出尝试更换USB线或USB接口检查手机是否弹出允许USB调试的授权对话框某些厂商需要安装特定驱动如小米的Mi PC Suite2.2 模拟器配置技巧Android Studio自带的模拟器性能不错但比较吃资源。我推荐使用Genymotion个人版启动速度快且支持拖拽安装APK。创建模拟器时要注意API Level选择与测试目标一致的版本分配至少2GB内存开启硬件加速需要BIOS中开启VT-x模拟器连接Appium有个小技巧先启动模拟器等完全启动后执行adb connect 127.0.0.1:5555端口号根据模拟器实际显示调整。连接成功后在Appium的desired_capabilities中deviceName填写模拟器名称即可。3. 编写第一个Python测试脚本3.1 基础脚本结构解析下面这个登录测试脚本模板是我在多个项目中总结出来的最佳实践from appium import webdriver from time import sleep def setup_driver(): desired_caps { platformName: Android, platformVersion: 10, deviceName: 华为Mate30, appPackage: com.example.app, appActivity: .MainActivity, noReset: True, automationName: UiAutomator2 } return webdriver.Remote(http://localhost:4723/wd/hub, desired_caps) def test_login(): driver setup_driver() try: driver.find_element_by_id(com.example.app:id/username).send_keys(testuser) driver.find_element_by_id(com.example.app:id/password).send_keys(123456) driver.find_element_by_id(com.example.app:id/login_btn).click() sleep(2) # 等待登录完成 assert driver.find_element_by_id(com.example.app:id/welcome_text).text 欢迎回来 finally: driver.quit()这个模板有几个关键点使用try-finally确保无论测试成功与否都会关闭drivernoReset设置为True避免每次测试都重新安装应用添加必要的等待时间但不要用固定sleep后面会讲更好的方法3.2 元素定位进阶技巧Appium支持多种定位方式但实践中我发现最可靠的是组合定位。比如# 优先使用resource-id driver.find_element_by_id(com.example:id/button) # 没有id时使用xpath driver.find_element_by_xpath(//android.widget.Button[text登录]) # 列表元素使用class name组合 buttons driver.find_elements_by_class_name(android.widget.Button) buttons[2].click() # 点击第三个按钮特别提醒绝对不要用坐标定位不同设备分辨率会导致点击位置错位。我早期项目因为这个原因在华为平板上全部用例失败血泪教训啊。4. 常见问题排查与优化4.1 高频错误解决方案Unable to find a matching device错误通常有三个原因设备未连接 - 检查adb devices输出platformVersion不匹配 - 确保与设备系统版本一致udid填写错误 - 真机使用adb devices显示的序列号元素找不到的问题可以先用Appium Desktop的Inspector工具确认元素是否存在。如果Inspector能看到但脚本找不到可能是需要等待元素出现添加显式等待元素在WebView中需要切换context页面有多个相同id元素改用xpath定位4.2 测试脚本优化建议好的测试脚本应该满足三个标准稳定、快速、易维护。我总结了几条优化经验使用Page Object模式把页面元素和操作封装成类比如class LoginPage: def __init__(self, driver): self.driver driver property def username_field(self): return self.driver.find_element_by_id(com.example:id/username) def login(self, username, password): self.username_field.send_keys(username) # 其他操作...实现智能等待用WebDriverWait替代sleepfrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, com.example:id/button)) )添加失败自动截图功能def save_screenshot(driver, case_name): timestamp time.strftime(%Y%m%d%H%M%S) driver.get_screenshot_as_file(f./screenshots/{case_name}_{timestamp}.png) try: # 测试步骤... except Exception as e: save_screenshot(driver, login_test) raise e这些技巧都是我踩过无数坑后总结出来的。刚开始可能觉得麻烦但随着测试用例增多你会发现前期的时间投入能带来后期维护效率的成倍提升。