Python+Appium移动端自动化测试入门:环境搭建与实战脚本编写

发布时间:2026/7/1 23:59:46
Python+Appium移动端自动化测试入门:环境搭建与实战脚本编写
1. 项目概述为什么选择PythonAppium作为移动端自动化测试的起点如果你刚接触自动化测试或者想从Web端转向移动端面对市面上五花八门的工具和框架可能会有点无从下手。我刚开始做移动端自动化时也经历过这个阶段试过一些录制回放工具也看过一些厂商的私有方案但最终我还是把PythonAppium这套组合推荐给了所有新手。原因很简单门槛低、生态好、上限高。门槛低是因为Python语言本身语法清晰接近自然语言学起来没那么痛苦。Appium作为一个开源的跨平台框架它封装了复杂的底层协议如WebDriver协议让你可以用一套API去测试Android和iOS应用不用分别学两套东西。生态好体现在Python有海量的库支持从数据处理到测试报告生成你几乎能找到任何你需要的轮子。而上限高意味着当你从简单的元素定位、点击操作进阶到处理混合应用、多设备并发、自定义插件时Appium和Python社区有足够深的水让你去趟。这个教程的目标就是帮你绕开我当年踩过的那些坑从零开始搭建环境、编写第一个脚本、理解核心概念一直到能独立完成一个基础但完整的自动化测试用例。我们不求一步登天但求每一步都走得扎实让你看完就能动手写了就能跑通。2. 环境搭建全攻略避开那些“坑爹”的配置问题环境搭建是劝退新手的第一个也是最大的拦路虎。网上教程很多但版本迭代快稍有不慎就会掉进坑里。这里我会给出一个经过大量实践验证的、相对稳定的环境配置方案并重点说明每个环节的注意事项。2.1 Python环境安装与配置别只盯着“Add to PATH”很多教程会告诉你安装Python时记得勾选“Add Python to PATH”但这只是第一步远不是全部。首先版本选择。对于自动化测试我强烈建议使用Python 3.8到3.10之间的版本。3.11及以上版本可能遇到一些第三方库兼容性问题而3.7已经逐步停止维护。去Python官网下载Windows installer时就选这个区间的稳定版。安装时的关键操作运行安装程序后务必勾选“Add Python to PATH”这能让系统在任何命令行位置识别python和pip命令。点击“Customize installation”在下一界面确保“pip”和“for all users”选项是勾选的。pip是Python的包管理工具没有它后续寸步难行。在高级选项Advanced Options里我建议修改安装路径。不要装在默认的C:\Program Files\下因为该路径可能有权限问题。可以改为C:\Python38或D:\Python38这样的简单路径。安装后验证 打开命令提示符CMD或 PowerShell输入python --version pip --version如果都能正确显示版本号说明Python环境基本OK。注意有时安装了多个Python版本会导致命令冲突。如果输入python无效可以尝试python3。或者直接使用安装路径下的python.exe例如C:\Python38\python.exe --version。虚拟环境配置强烈推荐 这是很多新手会忽略但老手必备的好习惯。虚拟环境可以为每个项目创建独立的Python包空间避免不同项目间包版本冲突。# 安装虚拟环境管理工具如果pip版本足够新venv模块可能已内置 pip install virtualenv # 为你Appium项目创建一个虚拟环境比如在D盘创建项目文件夹 cd D:\ mkdir AppiumProject cd AppiumProject virtualenv venv # 创建一个名为venv的虚拟环境文件夹 # 激活虚拟环境 # Windows CMD: venv\Scripts\activate # Windows PowerShell: .\venv\Scripts\Activate.ps1 # 激活后命令行前缀会变成(venv)表示已进入虚拟环境激活后所有通过pip install安装的包都只在这个虚拟环境内生效不会影响系统全局的Python环境。2.2 Appium Server的安装与核心概念理解Appium有两个核心组件Appium Server和Appium Clients。Server是一个HTTP服务器它接收来自Client你的Python脚本的请求并将其翻译成手机系统Android的UIAutomator2/iOS的XCUITest能理解的指令。Client就是各种语言的客户端库比如Python的Appium-Python-Client。安装Appium Server 现在最推荐的方式是使用Appium官方提供的桌面图形化工具——Appium Inspector它集成了Server和元素查看器。但为了更深入理解我们先通过Node.js安装命令行版本的Server。安装Node.js去Node.js官网下载LTS长期支持版安装包安装过程一路下一步即可。安装后在命令行输入node -v和npm -v验证。安装Appium Server通过npmNode.js的包管理器全局安装。npm install -g appium这个过程可能会比较慢取决于网络。安装完成后输入appium -v查看版本。安装驱动程序Appium 2.0之后核心驱动被模块化了。对于Android我们需要单独安装UIAutomator2驱动对于iOS需要XCUITest驱动。# 安装UIAutomator2驱动用于Android appium driver install uiautomator2 # 如果你需要测试iOS还需要安装XCUITest驱动此命令通常在macOS下执行 # appium driver install xcuitest启动Appium Server在命令行输入appium看到[Appium] Welcome to Appium v2.x.x和[Appium] Appium REST http interface listener started on 0.0.0.0:4723就表示启动成功。默认监听4723端口。不要关闭这个命令行窗口它就是你测试脚本要连接的服务器。实操心得在实际工作中我更倾向于使用Appium Inspector独立应用。它一键启动Server和Inspector界面特别方便调试和定位元素。你可以从Appium官网的Release页面下载对应系统的安装包。启动后先点击“Start Server”按钮再点击“Start Session”按钮来启动Inspector进行元素定位。这比命令行方式对新手更友好。2.3 Android测试环境配置以Android为例由于iOS测试需要macOS系统和苹果开发者账号门槛较高本教程以更普及的Android平台为例。安装Android SDK推荐直接安装Android Studio。在安装过程中它会自动安装Android SDK。记住SDK的安装路径默认通常在C:\Users\你的用户名\AppData\Local\Android\Sdk。配置环境变量新建系统变量ANDROID_HOME值为你的SDK路径如C:\Users\YourName\AppData\Local\Android\Sdk。在系统变量Path中添加以下条目%ANDROID_HOME%\platform-tools包含adb命令%ANDROID_HOME%\tools包含一些旧工具%ANDROID_HOME%\emulator如果你使用模拟器验证ADB打开新的命令行窗口输入adb version如果显示版本信息说明配置成功。ADBAndroid Debug Bridge是连接电脑和手机/模拟器的桥梁至关重要。准备测试设备真机用USB线连接手机在手机设置中开启“开发者选项”通常关于手机-版本号连续点击7次然后在开发者选项中开启“USB调试”。模拟器在Android Studio的AVD Manager中创建一个模拟器。建议选择中等配置的Pixel机型系统镜像选择API Level 30 (Android 11) 或以上的版本兼容性更好。连接设备在命令行输入adb devices。如果看到设备列表中出现一串序列号后面跟着device字样恭喜你连接成功。如果显示unauthorized去手机上查看应该会弹出一个“允许USB调试吗”的对话框勾选“始终允许”并确定。2.4 安装Python客户端库及其他工具回到我们之前激活的Python虚拟环境。安装Appium Python客户端pip install Appium-Python-Client这个库提供了所有用于编写脚本的Selenium/Appium API。安装IDE推荐使用VS Code。它轻量、免费且有强大的Python插件支持。安装后安装Python扩展由Microsoft发布。在VS Code中打开你的项目文件夹D:\AppiumProject它会自动识别虚拟环境。可选安装模拟器如果你没有安卓真机可以使用夜神模拟器、雷电模拟器等第三方模拟器。注意这些模拟器启动后也需要用adb connect 127.0.0.1:端口号的方式连接具体端口号查看模拟器设置然后才能在adb devices中看到。3. 第一个Appium自动化脚本从“Hello World”到理解Desired Capabilities环境配好了让我们来写第一个脚本。这个脚本的目标是打开手机上的计算器App然后点击一个按钮。3.1 理解Desired Capabilities脚本与Server的“契约”这是Appium中最核心的概念之一。你可以把它理解成一份“能力清单”或“契约”告诉Appium Server“我要测试什么样的设备、什么样的应用、用什么方式启动”。我们创建一个名为first_test.py的文件。from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy import time # 1. 定义Desired Capabilities desired_caps { # 平台名称必须是Android或iOS platformName: Android, # 平台版本填写你手机或模拟器的安卓大版本号如10, 11。不必完全精确。 platformVersion: 11, # 设备名称在adb devices命令中显示的名称。可以自定义但通常用.*或随便写。 deviceName: MyAndroidDevice, # 要测试的App包名 appPackage: com.android.calculator2, # 要启动的App的启动Activity名称 appActivity: com.android.calculator2.Calculator, # 防止每次启动都重新安装App noReset: True, # 设置命令超时时间 newCommandTimeout: 6000, # 使用UIAutomator2引擎Appium默认 automationName: UiAutomator2 }关键参数解读appPackage和appActivity这是启动Android应用的关键。如何获取后面在元素定位部分会讲。这里我们先使用安卓原生计算器的已知信息。noReset:True表示启动App时不会清除应用数据如登录状态。False则每次都会清空数据回到初始状态。根据测试场景选择。automationName: 指定底层驱动引擎。UiAutomator2是当前Android最稳定和功能全面的选择。3.2 初始化驱动与执行简单操作# 2. 连接Appium Server并传入我们的“契约” # 注意这里的URL是固定的指向本地启动的Appium Server driver webdriver.Remote(http://localhost:4723, desired_caps) # 等待几秒让App完全加载 time.sleep(3) # 3. 定位元素并操作 # 目标点击计算器上的数字“5” # 这里我们假设“5”这个按钮的resource-id是com.android.calculator2:id/digit_5 # (实际id可能需要用Appium Inspector查看我们先按这个写) try: # 通过ID定位元素 btn_five driver.find_element(AppiumBy.ID, com.android.calculator2:id/digit_5) # 点击元素 btn_five.click() print(成功点击了数字5按钮) except Exception as e: print(f定位或点击元素时出错{e}) # 4. 等待几秒观察结果 time.sleep(5) # 5. 关闭会话 driver.quit() print(测试结束驱动已关闭。)运行脚本确保Appium Server正在运行命令行窗口appium命令没关。确保手机/模拟器已连接adb devices能看到。在VS Code中右键点击first_test.py文件选择“在终端中运行Python文件”。如果一切顺利你会看到手机上的计算器被自动打开并且数字“5”被点击了一次。控制台会输出相应的成功信息。注意事项这个脚本非常脆弱因为它使用了固定的ID和time.sleep。在实际项目中这是不推荐的。我们接下来就要解决这两个问题如何可靠地定位元素以及如何优雅地等待。4. 元素定位策略详解告别“凭感觉”找元素元素定位是自动化测试的基石。如果找不到元素一切操作都无从谈起。Appium基于WebDriver协议提供了多种定位策略。4.1 八大定位方式实战解析我们继续以计算器为例假设我们要定位数字“9”的按钮。ID (Resource-ID)首选方式通常最稳定、最快。element driver.find_element(AppiumBy.ID, “com.android.calculator2:id/digit_9”)如何获取使用Appium Inspector或Android SDK自带的uiautomatorviewer工具查看。优点唯一性强定位精准。缺点不是所有元素都有ID特别是混合应用或某些H5页面中的元素。Accessibility ID (content-desc)次选方式。对于安卓它对应元素的contentDescription属性对于iOS是accessibilityIdentifier。通常用于无障碍阅读和测试。element driver.find_element(AppiumBy.ACCESSIBILITY_ID, “9”)优点语义化相对稳定。缺点开发人员可能不填写此属性。XPath功能强大但慎用。通过XML路径来定位元素。# 绝对路径非常脆弱不推荐 # element driver.find_element(AppiumBy.XPATH, ‘/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.GridLayout/android.widget.Button[9]’) # 相对路径结合属性推荐写法 element driver.find_element(AppiumBy.XPATH, ‘//android.widget.Button[text“9”]’) element driver.find_element(AppiumBy.XPATH, ‘//android.widget.Button[contains(resource-id, “digit_9”)]’)优点极其灵活几乎可以定位任何元素。缺点性能最差Appium需要遍历整个DOM树容易因UI结构微小变动而失效。黄金法则能用ID或Accessibility ID就不用XPath。Class Name通过控件类型定位。# 定位第一个Button控件 element driver.find_element(AppiumBy.CLASS_NAME, “android.widget.Button”) # 定位所有Button控件 elements driver.find_elements(AppiumBy.CLASS_NAME, “android.widget.Button”)优点简单。缺点通常一个页面同类控件太多不唯一需要结合其他条件筛选。Android UIAutomator (仅Android)使用Android原生UIAutomator的API进行定位功能强大。# 通过文本定位 element driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, ‘new UiSelector().text(“9”)’) # 通过ID定位 element driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, ‘new UiSelector().resourceId(“com.android.calculator2:id/digit_9”)’) # 组合条件 element driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, ‘new UiSelector().className(“android.widget.Button”).text(“9”)’)优点语法强大支持滚动查找等复杂操作。缺点仅限Android平台语法稍复杂。iOS Predicate String (仅iOS)和iOS Class ChainiOS平台的强大定位方式类似Android UIAutomator。CSS Selector (主要用于WebView/H5)当App内嵌浏览器页面WebView时可以像定位网页元素一样使用CSS选择器。这需要先切换到WebView上下文Context。4.2 使用Appium Inspector获取元素属性理论说再多不如动手看。启动Appium Inspector或Appium Desktop的Inspector功能。在Appium Inspector中配置好与之前脚本类似的Desired CapabilitiesplatformName,deviceName,appPackage,appActivity等。点击“Start Session”。连接成功后左侧是手机屏幕截图右侧是元素层级树。点击截图上的计算器按钮如数字9右侧会自动定位到该元素并显示其所有属性resource-id,text,content-desc,class,bounds等。这些属性值就是你可以用来定位的“武器”。优先抄写resource-id如果没有再考虑text或content-desc。实操心得在真实项目中元素的ID可能由开发框架自动生成是一长串无意义的字符串如com.xxx:id/a4b。这种情况下不要硬编码这个ID因为它可能下次编译就变了。应该让开发同学为重要的、需要测试的控件添加有意义的、稳定的resource-id或accessibility id这是实现测试脚本稳定性的重要前提需要测试和开发提前沟通好规范。5. 等待机制让脚本“聪明”地等待而不是“傻等”time.sleep(5)这种固定等待是万恶之源。它导致脚本运行效率极低且无法适应网络或手机性能的波动。我们必须使用智能等待。5.1 隐式等待 (Implicit Wait)在创建驱动后设置一次对整个驱动的生命周期有效。它告诉驱动在查找任何一个元素时如果找不到不要立即抛异常而是轮询查找最多等待N秒。driver webdriver.Remote(‘http://localhost:4723’, desired_caps) driver.implicitly_wait(10) # 单位秒特点全局性设置简单。缺点不够灵活对于某些不需要等待的操作也会强制等待可能拖慢脚本。通常作为一道“保险”设置一个较短的时间如5-10秒。5.2 显式等待 (Explicit Wait) ——主力推荐针对某个特定条件进行等待条件满足则立即继续超时则抛出异常。更加精准和高效。from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.appiumby import AppiumBy # 等待“等于”按钮出现最多等15秒每0.5秒检查一次 wait WebDriverWait(driver, 15, poll_frequency0.5) equals_button wait.until( EC.presence_of_element_located((AppiumBy.ID, ‘com.android.calculator2:id/eq’)) ) equals_button.click()常用预期条件 (EC)presence_of_element_located: 元素出现在DOM中不一定可见。visibility_of_element_located: 元素可见。element_to_be_clickable: 元素可点击。text_to_be_present_in_element: 元素中包含特定文本。最佳实践隐式等待作为基础保障显式等待用于关键操作。例如driver.implicitly_wait(5) # 全局保险等待5秒 # 进入某个页面后显式等待某个核心加载元素出现 wait WebDriverWait(driver, 20) loading_indicator wait.until(EC.invisibility_of_element_located((AppiumBy.ID, ‘loading’))) # 然后进行页面操作 input_box wait.until(EC.element_to_be_clickable((AppiumBy.ID, ‘input’))) input_box.send_keys(‘test’)5.3 强制等待 (time.sleep)除非极特殊情况如等待一个已知的、固定的动画或启动屏否则应避免使用。如果非用不可请加上注释说明理由。6. 编写一个完整的测试用例模拟计算器连续运算现在我们把所有知识串联起来写一个完整的测试用例让计算器完成“9 5 ”的运算并断言结果是否为14。from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import unittest class TestCalculator(unittest.TestCase): def setUp(self): “”“每个测试方法执行前运行用于初始化”“” desired_caps { ‘platformName’: ‘Android’, ‘platformVersion’: ‘11’, ‘deviceName’: ‘Android Emulator’, ‘appPackage’: ‘com.android.calculator2’, ‘appActivity’: ‘com.android.calculator2.Calculator’, ‘noReset’: True, ‘automationName’: ‘UiAutomator2’, ‘newCommandTimeout’: 6000 } self.driver webdriver.Remote(‘http://localhost:4723’, desired_caps) self.driver.implicitly_wait(5) self.wait WebDriverWait(self.driver, 10) def tearDown(self): “”“每个测试方法执行后运行用于清理”“” if self.driver: self.driver.quit() def test_addition(self): “”“测试加法功能9 5 14”“” driver self.driver wait self.wait # 1. 定位并点击数字9 btn_9 wait.until(EC.element_to_be_clickable((AppiumBy.ID, ‘com.android.calculator2:id/digit_9’))) btn_9.click() # 2. 定位并点击加号 ‘’ # 注意加号的ID可能不是‘plus’需要根据Inspector实际查看。这里假设是‘op_add’ btn_plus wait.until(EC.element_to_be_clickable((AppiumBy.ID, ‘com.android.calculator2:id/op_add’))) btn_plus.click() # 3. 定位并点击数字5 btn_5 wait.until(EC.element_to_be_clickable((AppiumBy.ID, ‘com.android.calculator2:id/digit_5’))) btn_5.click() # 4. 定位并点击等号 ‘’ btn_equals wait.until(EC.element_to_be_clickable((AppiumBy.ID, ‘com.android.calculator2:id/eq’))) btn_equals.click() # 5. 定位结果框获取文本并断言 # 结果通常显示在一个TextView里ID可能是‘result’或‘formula’ result_field wait.until(EC.presence_of_element_located((AppiumBy.ID, ‘com.android.calculator2:id/result’))) actual_result result_field.text # 断言结果是否为‘14’ self.assertEqual(actual_result, ‘14’, f“加法结果错误期望‘14’实际得到‘{actual_result}’”) print(“测试通过9 5 14”) if __name__ ‘__main__’: unittest.main()代码解读与技巧使用unittest框架这是Python自带的单元测试框架提供了setUp初始化、tearDown清理、assert断言等结构化方法让测试代码更规范、易于管理和批量运行。元素定位的稳定性所有关键操作都包裹在WebDriverWait.until中确保元素可交互时才进行操作极大提升了脚本的健壮性。断言使用self.assertEqual来验证实际结果是否符合预期这是自动化测试的核心——验证。查找真实ID脚本中的op_add,result等ID是我假设的。你必须使用Appium Inspector连接到你的计算器App亲自查看这些按钮的真实ID并替换到代码中这是动手的关键一步。7. 常见问题排查与实战技巧实录即使按照教程一步步来你也大概率会遇到一些问题。这里我整理了新手期最高频的几个“坑”及其解决方案。7.1 连接类问题问题现象可能原因排查步骤与解决方案adb devices列表为空1. USB线松动或损坏。2. 手机未开启USB调试。3. 电脑缺少手机驱动。1. 换线、换USB口。2. 确认手机“开发者选项”-“USB调试”已开启。连接时查看手机是否有授权弹窗。3. 安装手机厂商官方PC套件或使用第三方工具如360手机助手自动安装驱动。adb devices显示unauthorized手机未授权电脑进行USB调试。检查手机屏幕应出现“允许USB调试吗”的对话框勾选“始终允许”并确定。如果没出现重启adb服务adb kill-server然后adb start-server。Appium Server启动失败端口被占用4723端口被其他程序占用。1. 查找占用端口的进程netstat -ano | findstr :4723记下PID。2. 在任务管理器中结束对应PID的进程。3. 或者启动Appium时指定其他端口appium -p 4724同时脚本中连接URL也要改为http://localhost:4724。脚本报错Unable to create a new remote sessionDesired Capabilities配置错误Appium Server或设备未准备好。1. 检查appPackage和appActivity名称是否正确。可用命令adb shell dumpsys window | findstr mCurrentFocus查看前台Activity。2. 确认Appium Server日志没有报错。3. 确认设备已连接且adb devices状态为device。7.2 元素定位与操作类问题问题现象可能原因排查步骤与解决方案NoSuchElementException找不到元素1. 定位表达式写错。2. 元素尚未加载出来。3. 元素在WebView或混合应用中。1.使用Appium Inspector复核在Inspector中用相同的定位策略和值尝试看能否高亮选中元素。2.增加等待时间将隐式等待调大或对特定元素使用显式等待。3.检查上下文Context如果是H5页面需要先切换到WebView上下文driver.contexts获取所有上下文然后driver.switch_to.context(‘WEBVIEW_com.xxx’)。ElementNotInteractableException元素不可交互1. 元素被遮挡如弹窗。2. 元素在屏幕外需要滚动。3. 元素enabled属性为false。1. 处理弹窗先定位并关闭弹窗。2. 滚动到元素可见driver.execute_script(‘mobile: scroll’, {‘strategy’: ‘-android uiautomator’, ‘selector’: ‘new UiSelector().text(“目标文本”)’})(Android)。3. 检查元素状态等待其变为可交互状态EC.element_to_be_clickable。输入框.send_keys()不生效1. 焦点不在输入框。2. 输入法问题。1. 先.click()一下输入框再发送文本。2. 在Capabilities中禁用/启用默认输入法‘unicodeKeyboard’: True, ‘resetKeyboard’: True。这会让Appium使用自带的输入法进行输入避免系统输入法干扰。7.3 性能与稳定性技巧使用uiautomator2的disableWindowAnimationCapability在desired_caps中添加‘uiautomator2ServerInstallTimeout’: 60000, ‘disableWindowAnimation’: True。这可以禁用系统动画略微提升脚本执行速度并减少因动画导致的等待问题。善用page_source当页面复杂Inspector刷新慢时可以在脚本中打印driver.page_source将当前的UI层级结构以XML格式输出到控制台或文件方便离线分析元素属性。录制功能辅助Appium Inspector有录制操作并生成代码的功能Record。对于不熟悉的操作如滑动、长按可以先手动操作一遍让Inspector录制然后参考它生成的Python代码片段。封装公共方法将常用的操作如查找元素、等待、滑动封装成独立的函数或类方法可以极大减少代码重复提高可维护性。例如封装一个safe_find_element(id)函数内部集成显式等待和日志记录。8. 下一步进阶方向当你能够稳定地完成一个简单应用的自动化测试后可以朝着以下方向深入这些都是企业级自动化测试的常见需求测试框架集成将你的脚本与更强大的测试框架如pytest结合。pytest提供了更灵活的夹具fixture、参数化测试、丰富的插件如生成美观的HTML报告pytest-html、并发执行pytest-xdist等。Page Object Model (POM) 设计模式这是UI自动化测试的核心设计模式。将每个页面封装成一个类页面的元素定位和操作作为这个类的方法。测试脚本只调用页面对象的方法不直接包含定位符。这样做使代码结构清晰元素定位变更只需修改一个地方极大提升了可维护性。数据驱动测试将测试数据如用户名、密码、搜索关键词从脚本中分离出来存放在Excel、JSON、YAML或数据库中。测试脚本读取这些数据来运行多次测试用例。可以使用pytest的pytest.mark.parametrize装饰器轻松实现。持续集成(CI)将你的自动化测试脚本接入Jenkins、GitLab CI等持续集成工具。实现代码提交后自动触发测试、定时执行测试、并自动发送测试报告到邮箱或群聊。高级交互学习处理更复杂的用户交互如多点触控、滑动列表swipe或scroll、拖拽、长按、手势密码等。跨应用测试测试需要跳转到微信、支付宝等第三方应用再返回的场景。这需要理解Android的Activity和任务栈并使用driver.start_activity()或driver.activate_app()等方法来控制应用切换。移动端自动化测试是一个实践性极强的领域光看不动手永远学不会。最好的学习方式就是找到一个你手机上的真实App最好是自己公司开发的从登录这个最简单的流程开始模仿本教程的步骤一步步去实现自动化。遇到报错就根据错误信息去搜索、去排查。每解决一个实际问题你的能力就实实在在地增长了一分。这个过程会充满挑战但当你看到脚本流畅地操控手机完成一系列复杂任务时那种成就感是无与伦比的。