App UI自动化滑动验证码校验

部署运行你感兴趣的模型镜像

App UI自动化测试教程:滑动验证码校验

滑动验证码是常见的反机器人机制,测试时需模拟用户滑动操作并验证是否通过。本教程从零开始,使用Python和Appium(主流跨平台工具),覆盖环境搭建、脚本编写到结果验证。步骤清晰,适合初学者。

1. 引言:滑动验证码测试概述

滑动验证码在app登录中用于防止自动化脚本攻击,通常要求用户拖动滑块到指定位置。自动化测试需模拟这一过程:

  • 核心挑战:精确定位滑块元素、模拟真实滑动动作、验证校验结果。
  • 工具选择:Appium(开源工具,支持iOS/Android) + Python(简单易用)。
  • 测试目标:确保滑动操作后,app正确进入登录状态或显示成功提示。
2. 前置条件:环境准备

在开始前,确保您的系统满足以下要求:

  • 操作系统:Windows/macOS/Linux(本教程以Windows为例)。
  • 安装软件
    • Java JDK(版本8+):从Oracle官网下载安装。
    • Android SDK 或 Xcode(iOS测试):Android Studio包含SDK,iOS需Xcode(仅macOS)。
    • Appium Server:通过Node.js安装,命令:npm install -g appium
    • Python(版本3.6+):从Python官网下载安装。
    • Python库:安装Appium客户端,命令:pip install Appium-Python-Client
  • 测试设备:真实手机或模拟器(如Android Emulator或iOS Simulator),确保USB调试模式开启。
3. 环境设置:配置Appium和测试设备

这一步确保Appium能连接设备:

  1. 启动Appium Server
    • 命令行运行:appium,默认监听端口4723。
    • 验证:浏览器访问http://localhost:4723/wd/hub,应显示欢迎页面。
  2. 配置设备
    • Android:打开手机开发者选项,启用USB调试。连接电脑。
    • iOS(macOS):启动Xcode,设置Simulator。
    • 获取设备信息:命令行运行adb devices(Android)或xcrun simctl list(iOS),记录设备ID。
  3. 设置Desired Capabilities:定义测试参数,创建文件config.json
    {
      "platformName": "Android",  // 或 "iOS"
      "platformVersion": "11.0",  // 设备系统版本
      "deviceName": "emulator-5554",  // 设备ID
      "appPackage": "com.example.app",  // app包名
      "appActivity": ".MainActivity",  // app启动活动
      "automationName": "UiAutomator2"  // Android驱动
    }
    
    • 替换为您的app信息(包名和活动名可通过adb shell dumpsys window | find "mCurrentFocus"获取)。
4. 测试脚本编写:滑动验证码自动化步骤

我们将分步编写Python脚本,实现滑动操作和校验。核心逻辑:

  • 启动app并导航到登录页。
  • 定位滑块和背景元素。
  • 模拟滑动动作。
  • 验证校验结果。
步骤1: 导入库和初始化Driver

创建文件slide_captcha_test.py

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time

# 加载配置
desired_caps = {
    "platformName": "Android",
    "platformVersion": "11.0",
    "deviceName": "emulator-5554",
    "appPackage": "com.example.app",  # 替换为您的app包名
    "appActivity": ".LoginActivity",  # 替换为登录活动名
    "automationName": "UiAutomator2"
}

# 初始化Appium Driver
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(5)  # 等待app启动
步骤2: 定位登录页元素

滑动验证码通常由滑块(可拖动元素)和背景(目标区域)组成:

# 定位滑块元素(常见ID如'slide_button')
slider = driver.find_element_by_id("com.example.app:id/slide_button")
# 定位背景元素(目标位置,ID如'target_area')
target = driver.find_element_by_id("com.example.app:id/target_area")

# 获取元素坐标
slider_location = slider.location
target_location = target.location
print(f"滑块位置: {slider_location}, 目标位置: {target_location}")
步骤3: 模拟滑动动作

使用TouchAction模拟用户滑动,确保动作平滑:

# 计算滑动距离(从滑块中心到目标中心)
start_x = slider_location['x'] + slider.size['width'] / 2
start_y = slider_location['y'] + slider.size['height'] / 2
end_x = target_location['x'] + target.size['width'] / 2
end_y = target_location['y'] + target.size['height'] / 2

# 模拟滑动
action = TouchAction(driver)
action.press(x=start_x, y=start_y).wait(500).move_to(x=end_x, y=end_y).release().perform()
time.sleep(2)  # 等待校验完成
  • 关键点wait(500)添加延迟模拟真人操作,避免被检测为机器人。
步骤4: 验证校验结果

检查滑动后app是否登录成功:

# 验证方式1: 检查登录成功元素(如欢迎文本)
try:
    welcome = driver.find_element_by_id("com.example.app:id/welcome_text")
    if welcome.text == "登录成功":
        print("验证通过: 滑动校验成功")
    else:
        print("验证失败: 未显示成功提示")
except Exception as e:
    print(f"验证失败: 元素未找到,错误: {e}")

# 验证方式2: 检查URL或页面变化(适用于Webview)
# 示例: if driver.current_activity == ".HomeActivity": print("成功")

# 关闭Driver
driver.quit()
5. 完整代码示例

整合以上步骤,完整脚本slide_captcha_test.py

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time

desired_caps = {
    "platformName": "Android",
    "platformVersion": "11.0",
    "deviceName": "emulator-5554",
    "appPackage": "com.example.app",  # 替换为实际包名
    "appActivity": ".LoginActivity",  # 替换为实际活动名
    "automationName": "UiAutomator2"
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(5)

try:
    slider = driver.find_element_by_id("com.example.app:id/slide_button")
    target = driver.find_element_by_id("com.example.app:id/target_area")
    
    start_x = slider.location['x'] + slider.size['width'] / 2
    start_y = slider.location['y'] + slider.size['height'] / 2
    end_x = target.location['x'] + target.size['width'] / 2
    end_y = target.location['y'] + target.size['height'] / 2
    
    action = TouchAction(driver)
    action.press(x=start_x, y=start_y).wait(500).move_to(x=end_x, y=end_y).release().perform()
    time.sleep(2)
    
    welcome = driver.find_element_by_id("com.example.app:id/welcome_text")
    if welcome.text == "登录成功":
        print("测试通过: 滑动验证码校验成功")
    else:
        print("测试失败: 校验未通过")
except Exception as e:
    print(f"测试异常: {e}")
finally:
    driver.quit()
6. 运行测试和常见问题
  • 运行脚本:命令行执行python slide_captcha_test.py,查看输出日志。
  • 常见问题
    • 元素定位失败:使用Appium Inspector(工具)检查元素ID,或改用XPath定位。
    • 滑动不精确:调整坐标计算,添加随机偏移(如end_x += 5)模拟真人抖动。
    • 验证码动态变化:如果目标位置每次不同,需集成OCR(如Tesseract)识别背景图文本。
    • 反自动化检测:在Desired Capabilities中添加"noReset": true避免每次重置app。
  • 最佳实践
    • 添加显式等待(如WebDriverWait)处理元素加载延迟。
    • 在真机测试,模拟器可能无法完全模拟传感器行为。
    • 定期更新Appium和驱动版本。
7. 结论

本教程从零开始,详细介绍了app登录滑动验证码的自动化测试流程。通过Appium和Python,您能高效模拟用户操作并验证校验逻辑。关键点在于精确定位和真实滑动模拟。练习时,建议从简单app入手,逐步处理复杂场景。如有疑问,欢迎进一步交流!

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值