如何在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:
- 手动模拟滑动(坐标需根据设备分辨率调整,示例为从底部滑至顶部)
- 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
相关产品推荐
相关产品推荐

