Appium Inspector搭配Android真机/模拟器,从环境配置到第一个自动化脚本的完整踩坑记录
Appium Inspector实战指南从零搭建Android自动化测试环境1. 环境准备避开那些新手必踩的坑第一次接触Appium Inspector时我花了整整三天时间才让第一个测试脚本跑起来。无数个报错窗口、连接失败提示和莫名其妙的参数错误让我差点放弃。现在回想起来如果能提前知道这些关键点至少能节省80%的时间。核心工具清单Appium Server GUI2.0版本Android Studio用于获取adb工具和模拟器Java JDK 8Appium的底层依赖Node.jsAppium安装必备待测应用的APK文件注意千万不要直接安装Appium Inspector独立版最新版Appium Server GUI已内置Inspector功能单独安装反而会导致版本冲突。安装顺序很重要先装Java JDK并配置JAVA_HOME环境变量安装Node.js时勾选自动安装必要工具通过npm安装Appiumnpm install -g appium最后下载Appium Server GUI的可执行版本常见安装报错解决# 当出现Could not find adb错误时 export ANDROID_HOME/Users/你的用户名/Library/Android/sdk export PATH$PATH:$ANDROID_HOME/platform-tools2. 设备连接真机与模拟器的不同姿势连接Android设备就像第一次约会——看似简单实则暗藏玄机。我遇到过USB连接后毫无反应的情况也经历过模拟器启动后Appium死活识别不了的尴尬。2.1 真机调试实战关键步骤开启开发者选项连续点击版本号7次启用USB调试和USB安装权限使用原装数据线连接电脑在终端执行adb devices查看设备是否在线当设备列表为空时试试这个神奇命令adb kill-server adb start-server2.2 模拟器配置技巧Android Studio的模拟器有个隐藏坑点——默认不开启硬件加速。在AVD Manager中创建模拟器时记得配置项推荐值说明系统镜像API 30新版本兼容性更好性能设置Hardware - GLES 2.0必须开启加速存储空间4096MB以上避免卡顿启动选项Cold Boot减少初始化问题3. Capability配置那些文档没告诉你的细节第一次看到Capability配置界面时我完全懵了——二十多个参数官方文档却只说按需配置。经过数十次失败尝试后我总结出这套万能模板{ platformName: Android, appium:deviceName: Pixel_5_API_33, appium:appPackage: com.example.demoapp, appium:appActivity: .MainActivity, appium:automationName: UiAutomator2, appium:noReset: true, appium:fullReset: false, appium:disableWindowAnimation: true }关键参数解析noReset与fullReset90%的启动失败都与这两个参数有关。测试登录流程时需要设为false其他场景建议保持truedisableWindowAnimation大幅提升测试稳定性特别是滑动操作automationNameAndroid必须用UiAutomator2旧版UIAutomator已淘汰获取appPackage和appActivity的实用命令# 获取已安装应用的package列表 adb shell pm list packages # 获取当前运行Activity adb shell dumpsys window | grep mCurrentFocus4. Inspector实战从元素定位到脚本录制当Appium Inspector终于成功启动时那个瞬间就像第一次成功骑自行车——既兴奋又充满期待。但真正的挑战才刚刚开始。4.1 元素定位的三种武器XPath定位适合复杂结构driver.find_element(By.XPATH, //android.widget.Button[content-desc登录])ID定位最稳定首选driver.find_element(By.ID, com.example:id/login_btn)UIAutomator定位Android专属driver.find_element(By.ANDROID_UIAUTOMATOR, new UiSelector().text(确定))提示永远优先使用resource-id定位XPath在APP版本更新时极易失效4.2 录制功能的正确打开方式虽然官方提供了录制功能但直接使用生成的脚本绝对是灾难。我改良后的工作流用Inspector定位关键元素并复制XPath手动编写定位代码添加显式等待避免竞态条件from 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/btn_submit)) )加入异常处理逻辑try: element.click() except ElementClickInterceptedException: driver.swipe(500, 1800, 500, 1000, 400) # 滑动解除弹窗遮挡 element.click()5. 调试技巧当脚本就是不按预期运行时即使一切配置正确脚本也可能莫名其妙失败。我的调试三板斧1. 查看Appium日志启动Server时勾选Show timestamps和Local timezone重点关注Original error:后面的真实错误原因2. 使用adb直接操作设备# 查看当前Activity栈 adb shell dumpsys activity activities # 模拟按键事件 adb shell input keyevent KEYCODE_HOME3. 视频录制回放在Capability中添加appium:recordVideo: true, appium:videoQuality: medium, appium:videoFps: 106. 性能优化让你的脚本快如闪电当测试用例超过100个时执行速度就会成为瓶颈。这些优化让我的测试套件从2小时缩短到20分钟并行测试配置capabilities.setCapability(appium:adbExecTimeout, 30000); capabilities.setCapability(appium:uiautomator2ServerInstallTimeout, 60000);禁用非必要服务desired_caps[appium:skipServerInstallation] True desired_caps[appium:skipDeviceInitialization] True智能等待策略def wait_for_element(driver, locator, timeout10): try: return WebDriverWait(driver, timeout).until( lambda d: d.find_element(*locator).is_displayed() ) except: driver.save_screenshot(timeout_error.png) raise在小米12 Pro上实测优化前后的性能对比测试场景优化前耗时优化后耗时登录流程12.3秒6.8秒商品搜索8.5秒3.2秒订单支付15.7秒9.1秒7. 企业级实战持续集成中的注意事项当我把本地调试好的脚本放到Jenkins上运行时出现了各种环境问题。这些经验值得分享容器化部署方案FROM appium/appium:latest # 安装必要工具 RUN apt-get update apt-get install -y \ android-sdk-platform-tools-common \ fonts-noto-color-emoji # 设置环境变量 ENV PATH/opt/android-sdk-linux/platform-tools:${PATH}Jenkins关键配置在全局工具配置中指定adb路径添加构建后操作Publish Appium test results report使用Docker容器作为构建环境稳定性增强技巧在Capability中添加重试逻辑appium:maxRetries: 3, appium:retryBackoffTime: 5000使用Appium的sessionOverride功能避免端口占用配置自动截图当用例失败8. 那些我踩过的坑与解决方案Error: Could not sign with default certificate原因Appium Server缓存问题解决删除/tmp/appium-tmp目录下所有文件Error: Failed to start an Appium session原因设备未授权解决执行adb uninstall io.appium.settings后重试Error: UiAutomator exited unexpectedly原因Android系统WebView未更新解决在设备上更新Android System WebViewInspector无法刷新页面原因Appium Settings应用被禁用解决重新安装io.appium.settingsAPKXPath定位突然失效原因APP版本更新改变了UI结构解决改用相对XPath或组合定位策略9. 进阶路线从Inspector到完整框架当你能熟练使用Inspector后就该考虑这些进阶方向了1. 页面对象模式(POM)实现class LoginPage: def __init__(self, driver): self.driver driver self.username (By.ID, com.example:id/et_username) self.password (By.ID, com.example:id/et_password) self.submit (By.ID, com.example:id/btn_login) def login(self, username, password): self.driver.find_element(*self.username).send_keys(username) self.driver.find_element(*self.password).send_keys(password) self.driver.find_element(*self.submit).click()2. 数据驱动测试import pytest pytest.mark.parametrize(username,password,expected, [ (test1, 123456, True), (wrong, password, False) ]) def test_login(username, password, expected): result LoginPage(driver).login(username, password) assert result expected3. 跨平台测试策略// 统一iOS和Android定位策略 public MobileElement getElement(String platform, String locator) { if (platform.equals(iOS)) { return driver.findElementByAccessibilityId(locator); } else { return driver.findElementById(locator); } }10. 资源推荐持续精进的必备清单开源项目学习Appium Desktop - 官方GUI源码Appium Boilerplate - 最佳实践示例调试工具集uiautomatorviewerAndroid SDK自带的元素查看器STF远程真机调试平台Frida动态分析APP行为性能分析命令# 查看CPU占用 adb shell top -n 1 | grep com.example # 内存使用情况 adb shell dumpsys meminfo com.example.demoapp书籍推荐《移动App测试实战》- 腾讯TMQ团队《Appium Essentials》- 官方推荐教程《Selenium WebDriver3实战宝典》- 核心原理相通
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2566480.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!