You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Appium中处理Android应用的屏幕锁定/解锁测试场景?

Appium实现Android屏幕锁定/解锁测试场景

前置条件

  • 设备未锁定,已通过Appium完成连接
  • 已配置好对应语言的Appium测试客户端(Java/Python)

一、锁定屏幕的实现方式

方式1:使用Appium内置API

适用于Appium 1.x/2.x版本,直接调用官方提供的锁定方法:

  • Java客户端:
// 锁定屏幕(默认保持锁定直到手动解锁)
driver.lock();
// 或者锁定指定时长(示例:锁定5秒)
driver.lock(Duration.ofSeconds(5));
  • Python客户端:
# 锁定屏幕
driver.lock()
# 锁定指定时长(示例:锁定5秒)
driver.lock(5)

方式2:执行ADB命令

若内置API调用异常,可通过ADB模拟电源键按下(电源键事件码为26):

  • Java客户端:
// 执行ADB命令锁定屏幕
((AndroidDriver) driver).executeScript("mobile: shell", Map.of("command", "input keyevent 26"));
  • Python客户端:
# 执行ADB命令锁定屏幕
driver.execute_script('mobile: shell', {'command': 'input keyevent 26'})

二、解锁屏幕的实现方式

场景1:默认滑动解锁

如果设备采用滑动解锁模式,优先使用内置解锁API;若API失效,可手动模拟滑动动作:

  • 内置API调用
    • Java:driver.unlock();
    • Python:driver.unlock()
  • 手动模拟滑动(坐标需根据设备分辨率调整,示例为从底部滑至顶部)
    • Java客户端:
new TouchAction(driver)
    .press(PointOption.point(500, 1500))
    .waitAction(WaitOptions.waitOptions(Duration.ofMillis(500)))
    .moveTo(PointOption.point(500, 500))
    .release()
    .perform();
  • Python客户端:
from appium.webdriver.common.touch_action import TouchAction
TouchAction(driver).press(x=500, y=1500).wait(500).move_to(x=500, y=500).release().perform()

场景2:密码/PIN码解锁

针对密码/PIN码解锁场景,需先唤醒屏幕,再模拟输入密码并确认:

  • Java客户端:
// 唤醒屏幕(若屏幕处于熄灭状态)
((AndroidDriver) driver).executeScript("mobile: shell", Map.of("command", "input keyevent 26"));
// 输入PIN码(示例:1234)
((AndroidDriver) driver).executeScript("mobile: shell", Map.of("command", "input text 1234"));
// 按下回车键确认
((AndroidDriver) driver).executeScript("mobile: shell", Map.of("command", "input keyevent 66"));
  • Python客户端:
# 唤醒屏幕(若屏幕处于熄灭状态)
driver.execute_script('mobile: shell', {'command': 'input keyevent 26'})
# 输入PIN码(示例:1234)
driver.execute_script('mobile: shell', {'command': 'input text 1234'})
# 按下回车键确认
driver.execute_script('mobile: shell', {'command': 'input keyevent 66'})

三、完整测试用例示例(Python版)

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

desired_caps = {
    "platformName": "Android",
    "deviceName": "你的设备名称",
    "appPackage": "com.your.app.package",
    "appActivity": "com.your.app.MainActivity",
    "noReset": True
}

driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

try:
    # 等待应用加载完成
    time.sleep(3)
    
    # 执行锁定屏幕操作
    driver.lock()
    print("屏幕已锁定")
    time.sleep(2)
    
    # 执行滑动解锁操作
    TouchAction(driver).press(x=500, y=1500).wait(500).move_to(x=500, y=500).release().perform()
    print("屏幕已解锁")
    
    # 验证应用是否正常恢复(可替换为你的应用断言逻辑)
    assert driver.find_element_by_id("com.your.app.package:id/home_btn").is_displayed()
    
finally:
    driver.quit()

内容的提问来源于stack exchange,提问作者rakeshsahu59

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:25:25